Воспроизведение нескольких аудиофайлов с помощью AVAudioPlayer - PullRequest
7 голосов
/ 06 апреля 2010

Я планирую выпустить 10 моих песен бесплатно, но в комплекте с приложением для iphone. Они не доступны ни в Интернете, ни в iTunes, ни где-либо еще.

Я новичок в iphone sdk (последняя версия), как вы можете себе представить, поэтому я изучал документацию для разработчиков, различные форумы и стекопоток, чтобы узнать.

Пример приложения Apple avTouch был отличным началом. Но я хочу, чтобы мое приложение проигрывало все 10 треков один за другим. Все песни добавляются в папку ресурсов и называются track1, track2 ... track10.

В коде приложения avTouch я вижу следующие 2 части, в которых, как мне кажется, мне нужно внести изменения, чтобы добиться того, что я ищу. Но я потерялся.

// Load the array with the sample file
NSURL *fileURL = [[NSURL alloc] 
                 initFileURLWithPath: 
                 [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"m4a"]];


- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag == NO)
    NSLog(@"Playback finished unsuccessfully");

[player setCurrentTime:0.];
[self updateViewForPlayerState];
}

Может кто-нибудь, пожалуйста, помогите мне на
1. как загрузить массив со всеми 10 дорожками, которые добавляются в папку ресурсов
2. и когда я нажимаю кнопку воспроизведения, игрок должен начать первую дорожку. когда заканчивается первая дорожка, должна начаться вторая дорожка и так далее для остальных дорожек.

Спасибо

Ответы [ 2 ]

8 голосов
/ 27 апреля 2010

inScript, вы уже нашли решение этой проблемы? Возможно, вы захотите придерживаться чего-то простого, например, if { // do something } else { // do something else }, чтобы воспроизводить их вплотную.

Для загрузки в массив создайте новый plist-файл (щелкните правой кнопкой мыши на дереве каталогов -> Добавить -> Новый файл "и найдите там список свойств; назовите звуковой список файлов. Затем откройте этот новый файл, щелкните правой кнопкой мыши на там, где по умолчанию написано «Словарь», перейдите к «Тип значения» и выберите «Массив» ... Если вы посмотрите в крайнюю правую часть этой строки, вы увидите маленькую кнопку с 3 полосами, нажмите добавить свой первый элемент. Теперь вы добавляете по одному элементу за раз: «track01», «track02» и т. д. по одному на строку.

Этот код входит в ваш .h файл:

NSArray* soundsList;

Этот код входит в ваш файл .m:

NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist" ofType:@"plist"];
soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];

Массивы всегда начинаются с индекса # 0 ... так что если у вас есть 5 треков, track01 будет индексом 0, track02 будет индексом 1 и так далее. Если вы хотите быстро опросить свой массив, чтобы увидеть, что в нем, вы можете добавить этот бит кода:

int i = 0;

for (i; i <= ([soundsList count] - 1); i++) {

    NSLog(@"soundsList contains %@", [soundsList objectAtIndex:i]);

}

Все, что нужно сделать, это подсчитать, сколько элементов находится в вашем массиве (т. Е. 5 или 10 или сколько угодно песен), и objectAtIndex: вернет объект с любым индексным номером, который вы отправите в него.

Для одновременного воспроизведения вы просто поместите оператор if-then в метод audioPlayerDidFinishPlaying

Если вы хотите воспроизвести файл, вы можете сделать:

NSString* filename = [soundsList objectAtIndex:YOURINDEXNUMBER];
NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"mp3"];  

AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];  
self.theAudio = newAudio; // automatically retain audio and dealloc old file if new file is loaded

[newAudio release]; // release the audio safely

theAudio.delegate = self; 
[theAudio prepareToPlay];
[theAudio setNumberOfLoops:0];
[theAudio play];

где YOURINDEXNUMBER - это любой трек #, который вы хотите воспроизвести (помните, 0 = track01, 1 = track02 и т. Д.)

Если вам нужна помощь в настройке переменных в вашем .h файле, дайте мне знать, и я могу помочь вам в этом. Кроме того, не забудьте высвободить theAudio в вашем методе dealloc, чтобы он высвобождал его при выходе из программы.

0 голосов
/ 15 апреля 2011

В вашем коде U может вызывать плеер и воспроизводить звук снова в audioPlayerDidFinishPlaying и отслеживать, сколько треков вы проигрываете (с помощью счетчика).

Создание условного кода. Вы можете управлять своим проигрывателем многократно воспроизводить 10 треков снова и снова .....

Для большей функциональности вы можете получить ссылку на класс проигрывателя AVAudio. Ссылка ...

Для лучшего внешнего вида вы кладете другую кнопку и настраиваете громкость вращения noob .... используя CoreAnimation Class ....

Best Of Luck

...