javascript - Vad är det bästa sättet att förstöra en audionod
Jag bygger något som kräver skapandet och borttagningen av potentiellt många ljudnoder. Såvitt jag vet, för att förstöra en ljudnod är det nödvändigt att:
- sätt alla referenser till noden till null eller något annat
- anropa stop-metoden om tillämpligt
- koppla bort alla anslutningar in och ut
De första två är tillräckligt enkla men jag försöker lista ut om det är möjligt att lista alla nodens anslutningar och behöver också veta om något annat saknas från min lista. Jag behöver också veta hur jag kan upptäcka existensen av en orefererad ljudnod.
Svar #1
Här är specifikationerna för livslängden hos en AudioNode:
En AudioNode kommer att leva så länge det finns några referenser till den. Det finns flera typer av referenser:
- En normal JavaScript-referens som följer normala regler för skräpsamling.
- En spelreferens för både AudioBufferSourceNodes och OscillatorNodes. Dessa noder behåller en spelreferens till sig själva medan de för närvarande spelar.
- En anslutningsreferens som uppstår om en annan AudioNode är kopplad till den.
- En tail-tidsreferens som en AudioNode behåller på sig själv så länge den har något internt bearbetningstillstånd som ännu inte har emitterats. Till exempel har en ConvolverNode en tail som fortsätter att spela även efter att ha mottagit tyst input (tänk på att klappa händerna i en stor konserthall och fortsätta höra ljudet eka genom hela hallen). Vissa AudioNodes har denna egenskap. Se detaljer för specifika noder.
Alla AudioNodes som är anslutna i en cykel och är direkt eller indirekt anslutna till AudioDestinationNode i AudioContext kommer att förbli aktiva så länge AudioContext är aktivt.
Så, utifrån min förståelse:
- En spelande AudioNode behöver bara stoppas.
- andra är bäst att kopplas bort.
- Det skadar inte att koppla bort dem alla.
Svar #2
Om du helt enkelt anropar audioNode.disconnect() utan några parametrar, kommer det att koppla bort alla ingångar till noden samt alla utgångar från den.