Из вашего описания звучит так, как будто вы пытаетесь написать программный синтезатор. Единственный способ, которым вы могли бы использовать AVAudioPlayer
для чего-то подобного, это составить всю длительность заметки в виде одного файла WAV, а затем воспроизвести все это с помощью AVAudioPlayer
.
Для создания звука ноты произвольной длительности, который начинает воспроизводиться в ответ на действие пользователя (например, нажатие кнопки), а затем продолжается до второго действия пользователя (например, нажатие кнопки «Стоп» или отмена пальца). первая кнопка) начинает процесс понижения громкости зацикленной области до нуля (часть «релиз»), вам нужно будет использовать AudioQueue
(AVAudioPlayer
может использоваться для воспроизведения звука, созданного полностью в памяти, но весь воспроизведение должно быть построено до начала воспроизведения, а это означает, что вы не можете изменить то, что воспроизводится, в ответ на действия пользователя [кроме как остановить воспроизведение]).
Вот другой вопрос / ответ , который показывает просто, как использовать AudioQueue
. AudioQueue
вызывает метод обратного вызова всякий раз, когда ему нужно загрузить больше данных для воспроизведения - вам придется реализовать весь код, который зацикливает и оборачивает исходные данные файла WAV.