Chrome 27 beta getta una SyntatxError quando provo ad eseguire la seguente riga di javascript:Web quando seguo l'API
offlineContext = new webkitOfflineAudioContext(2, 7*48000, 48000);
Questo è in conformità con la raccomandazione del W3C, e dopo ore di ricerca sul web ho visto decine di esempi che apparentemente funzionano con questa forma esatta. So che l'API può essere soggetta a modifiche, ma non riesco a trovare alcun suggerimento che abbia. Dove sto andando male?
Stranamente, non fallisce quando provo in jsfiddle. Ho anche provato a eseguire in jsfiddle l'intera funzione in cui questo frammento esiste, eliminando un paio di elementi. Di seguito è la funzione che sto cercando di eseguire. Un "SyntaxError Dom Exception 12" si verifica dove indicato quando viene eseguita la funzione.
Ho un'app audio funzionante e sto solo cercando di aggiungere l'elaborazione in background per il rendering successivo utilizzando un OfflineAudioContext. Se definisco OfflineAudoiContext nella mia funzione init, non riesco a ottenere l'errore di sintassi. Ma ho bisogno di definirlo nella funzione createRenderData() perché ho bisogno di impostare la lunghezza e la frequenza di campionamento per ogni fonte multimediale, e se chiamo il costruttore OfflineAudioContext senza argomenti, ottengo un TypeError. Inoltre non vedo alcun modo nell'API per impostare la lunghezza e la frequenza di campionamento su un OfflineAudioContext esistente.
AudioUI.createRenderData = function() {
var url = BGAudioUI.renderQueue.pop();
if (url) {
BGAudioUI.media = new Audio(url);
BGAudioUI.media.addEventListener('durationchange', function() {
console.log("background duration: " + BGAudioUI.media.duration);
BGAudioUI.duration = BGAudioUI.media.duration;
//BGAudioUI.allData = new Float32Array(Math.floor((AudioUI.context.sampleRate.toFixed()/AudioUI.downsampleFactor.toFixed() * BGAudioUI.duration)) + 1);
//console.log("calculated sample rate: " + Math.floor(AudioUI.context.sampleRate/AudioUI.downsampleFactor.toFixed()));
//console.log("duration: " + BGAudioUI.duration);
BGAudioUI.offlineContext = new webkitOfflineAudioContext(2, 7*48000, 48000); //SyntaxError DOM Exception 12 occurs here
BGAudioUI.mediaSource = BGAudioUI.offlineContext.createMediaElementSource(BGAudioUI.media);
BGAudioUI.offlineContext.oncomplete = function(buffer) {
data = buffer.getChannelData(0);
console.log(data.length + " records processed offline");
};
BGAudioUI.offlineContext.startRendering();
BGAudioUI.media.play();
console.log("created background media source for " + BGAudioUI.media.src);
}, false);
BGAudioUI.media.load();
console.log("created background media object for " + BGAudioUI.media.src);
} else {
alert("Background rendering complete");
}
};
Correzione: ho la SyntaxError quando chiamo anche il costruttore nella funzione init. Deve averlo perso prima. – MidnightJava
Qualche possibilità che tu sia su una macchina Windows? Funziona sul mio Mac. Forse non l'hanno ancora implementato per Win/Chrome. –
Non funziona su OSX ma non su CentOs (la distribuzione Fedora di Chrome). Ho scoperto qual è il problema, comunque. Si scopre che la frequenza di campionamento per OfflineAudioContext deve essere identica all'impostazione per il normale AudioContext. – MidnightJava