AVQueuePlayer воспроизводит мою последовательность звуков только один раз при первом нажатии на кнопку
Я настроил AVQueuePlayer
названный игрок в моем viewDidLoad
метод. у меня тоже есть UIbutton
метод, который играет эту последовательность.
вот мой взгляд сделал метод загрузки
AVPlayerItem *firstSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"first" ofType:@"mp3"]]];
AVPlayerItem *secondSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"second" ofType:@"mp3"]]];
AVPlayerItem *thirdSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"third" ofType:@"mp3"]]];
player = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:firstSound, secondSound, thirdSound, nil]];
и вот метод моей кнопки
-(IBAction)sequencePlay:(id)sender {[player play];}
нажатие кнопки производит последовательность звуков только один раз, когда вид загружается впервые. когда я нажимаю кнопку снова, ничего не происходит. однако, если я перейду к другому контроллеру представления и вернусь к этому контроллеру представления, он будет работать при первом нажатии кнопки снова, но, как и раньше, он будет работать только для первого щелчка.
обновление: выполнение установки в кнопке вместо метода viewDidLoad было ключевым моментом в соответствии с первым ответом для решения моей проблемы.
Мои mp3-файлы маленькие, каждый файл - это только одно произносимое слово. У меня есть настройка UIPickerView с 3 столбцами, и в зависимости от того, какие строки выбраны, он будет воспроизводить эти конкретные слова в последовательности при нажатии кнопки. Любой хороший совет о том, как я могу сделать это?
я сейчас пытаюсь это сделать но получаю ошибку
-(IBAction)sequencePlay:(id)sender
{
NSString *sayFirst = _firstRowWord.description;
AVPlayerItem *firstSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:sayFirst.description ofType:@"mp3"]]];
я получаю следующую ошибку* Завершение приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "* - [NSURL initFileURLWithPath:]: параметр строки nil"
описание firstRowWord совпадает с именем файла mp3, который я хочу воспроизвести
1 ответ
Вы можете попробовать использовать sequencePlay: метод для настройки там AVQueuePlayer. Так:
-(IBAction)sequencePlay:(id)sender {
AVPlayerItem *firstSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"first" ofType:@"mp3"]]];
AVPlayerItem *secondSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"second" ofType:@"mp3"]]];
AVPlayerItem *thirdSound = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"third" ofType:@"mp3"]]];
player = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:firstSound, secondSound, thirdSound, nil]];
[player play];
}
Если вас беспокоит производительность, вы можете использовать свойство actionAtItemEnd для повторного заполнения проигрывателя. Надеюсь, это помогло!