Ho una funzione js per riprodurre qualsiasi suono dato usando l'interfaccia Audio (creando una nuova istanza per ogni chiamata).Javascript forza raccolta GC?/Oggetto a forza libera?
Questo funziona abbastanza bene, fino a circa la 32a chiamata (a volte meno). Questo problema è direttamente correlato al rilascio dell'istanza Audio. Lo so perché ho lasciato correre il tempo per il GC in Chromium e mi consentirà di riprodurre ancora altri 32 suoni.
Ecco un esempio di quello che sto facendo:
<html><head>
<script type="text/javascript">
function playSound(url) {
var snd = new Audio(url);
snd.play();
snd = null;
}
</script>
</head>
<body>
<a href="#" onclick="playSound('blah.mp3');">Play sound</a>
</body></html>
Ho anche questo, che funziona bene per le pagine che hanno meno di 32 PlaySound chiama:
var AudioPlayer = {
cache: {},
play: function(url) {
if (!AudioPlayer.cache[url])
AudioPlayer.cache[url] = new Audio(url);
AudioPlayer.cache[url].play();
}
};
ma questo non lavoro per quello che voglio fare (sostituire dinamicamente un div con altri contenuti (da file separati), che hanno ancora più suoni su di essi - 1. l'utilizzo della memoria potrebbe facilmente salire alle stelle, 2. molti suoni non giocheranno mai).
Ho bisogno di un modo per rilasciare immediatamente il suono. È possibile farlo? Non ho trovato alcun metodo di libero/chiudi/scarica per l'interfaccia audio.
Le pagine verranno visualizzate localmente, quindi il caricamento costante dei suoni non è affatto un fattore importante (e la maggior parte dei suoni è piuttosto breve).
Greeaat. Dovrei iniziare a utilizzare uno script per avviare Chromium per questo progetto (già utilizzando --allow-file-access-from-files in modo che possa aprire file dal filesystem locale). EDIT: lo considero un'ultima risorsa. – komiga
@plash: assicurati di controllare [il post che ho collegato a] (https://groups.google.com/group/chromium-extensions/browse_thread/thread/5dc4be46e434116a?pli=1), perché la risposta che ho citato aveva ulteriori informazioni che potrebbero essere rilevanti. Non l'ho provato personalmente. –
Non funziona in build non di debug. Ho appena provato. – komiga