Wiederverwenden eines AVAudioPlayers für einen anderen Sound

8

Ich habe eine Instanz von AVAudioPlayer, die mehrere Sounds abspielen wird. Gibt es eine Möglichkeit, eine AVAudioPlayer-Instanz mit einem neuen Sound zu versehen, oder muss ich eine neue Instanz mit initWithData erstellen:?

    
cfischer 23.06.2011, 09:37
quelle

2 Antworten

1

Die Wiederverwendung von Objekten ist normalerweise eine schlechte Idee, im Allgemeinen versuchen Sie, Ihre Objekte so kurz wie möglich zu halten. Dies reduziert die Anzahl der möglichen Zustände Ihres Codes und erleichtert das Nachdenken darüber. ("Woher kam dieser Wert? Vielleicht ist es ein Überbleibsel aus der vorherigen Instanz Verwendung?" Yuck.) Brechen Sie diese Regel nur, wenn Sie in messbare Probleme laufen.

Weitere Informationen zu diesem Gedankengang finden Sie in mit "unveränderlich" getaggten Fragen .

    
zoul 23.06.2011, 09:51
quelle
19

Es gibt keine API, um eine neue Datei an eine vorhandene AVAudioPlayer-Instanz zu übergeben. Die Erstellung von AVAudioPlayer ist jedoch nicht teuer, daher sollten Sie sich keine Gedanken um die Leistung machen, solange Sie die Instanzen freigeben, sobald Sie fertig sind.

Wenn Sie über einen festen Satz von Sounds verfügen, die sich überspielen oder wahrscheinlich wiederholt abgespielt werden, können Sie für jeden Sound eine AVAudioPlayer-Instanz erstellen und diese Instanzen durch Aufrufen von play für die entsprechende Instanz erneut verwenden / p>

Wenn nur ein Sound gleichzeitig abgespielt wird und Sie neue Sounds erzeugen (zum Beispiel mit Text-to-Speech basierend auf Benutzereingaben), habe ich im Allgemeinen einen einzelnen Player als Eigenschaft. Wenn ein neuer Sound abgespielt wird, rufe ich [player stop] auf, lasse den alten Player los und instanziiere einen neuen mit der neuen Sounddatei.

    
Christopher Pickslay 24.06.2011 16:52
quelle