Повторное использование AVAudioPlayer для другого звука - PullRequest
8 голосов
/ 23 июня 2011

У меня есть экземпляр AVAudioPlayer, который будет воспроизводить несколько звуков. Есть ли способ обеспечить экземпляр AVAudioPlayer новым звуком или мне нужно создать новый экземпляр с initWithData:?

Ответы [ 2 ]

21 голосов
/ 24 июня 2011

Нет API для передачи нового файла в существующий экземпляр AVAudioPlayer.Однако создание AVAudioPlayer не требует больших затрат, поэтому вам не следует беспокоиться о производительности, если вы выпускаете экземпляры, как только закончите с ними.

Если у вас есть фиксированный набор звуков, которые воспроизводятся друг над другом или могут воспроизводиться неоднократно, вы можете создать один экземпляр AVAudioPlayer для каждого звука и повторно использовать эти экземпляры, вызвав play для соответствующегоinstance.

Если за один раз воспроизводится только один звук, и вы генерируете новые звуки (например, с преобразованием текста в речь на основе пользовательского ввода), у меня обычно есть один проигрыватель в качестве свойства.Когда воспроизводится новый звук, я звоню [player stop], освобождаю старый плеер и создаю новый звук с новым звуковым файлом.

0 голосов
/ 23 июня 2011

Повторное использование объектов обычно плохая идея, обычно старайтесь, чтобы ваши объекты были как можно более короткими.Это уменьшает количество возможных состояний вашего кода и облегчает рассуждения об этом.(«Откуда пришло это значение? Может быть, это пережиток предыдущего использования экземпляра?». Блин.) Нарушайте это правило только тогда, когда вы столкнетесь с измеримыми проблемами.

Для дальнейшего чтения по этой линии вы можетепросмотрите вопросы с тегом «неизменный» .

...