Shared Chrome AudioContext в Persistent фоне Сценарий
var audioContext = new window.AudioContext
chrome.runtime.onMessage.addListener(
function(imageUrl, sender, sendResponse) {
if (imageUrl != "") sound(523.251, 587.330) else sound(523.251, 493.883)
})
function sound(frequency1, frequency2) {
soundDuration = 0.1
var audioGain1 = audioContext.createGain()
audioGain1.gain.value = 0.1
audioGain1.connect(audioContext.destination)
var audioGain2 = audioContext.createGain()
audioGain2.gain.value = 0.1
audioGain2.connect(audioContext.destination)
var audioOscillator1 = audioContext.createOscillator()
audioOscillator1.type = "sine"
audioOscillator1.frequency.value = frequency1
audioOscillator1.connect(audioGain1)
var audioOscillator2 = audioContext.createOscillator()
audioOscillator2.type = "sine"
audioOscillator2.frequency.value = frequency2
audioOscillator2.connect(audioGain2)
audioOscillator1.start(0); audioOscillator1.stop(soundDuration)
audioOscillator2.start(soundDuration); audioOscillator2.stop(soundDuration*2)
}
Я разрабатываю расширение Google Chrome (версия 47.0.2526.111 м). Я столкнулся с проблемой: я превысил предел AudioContext (AC) в шесть (6) с кодом, запущенным в скрипте веб-страницы (CS). Я переписал код, чтобы отправить сообщение CS на постоянный фоновый сценарий (BS). Я определил AudioContext в теле BS, надеясь, что создаст только один экземпляр. Каждый раз, когда CS отправляет сообщение BS, я хочу воспроизвести два (2) тона. Я обнаружил, что мне нужно создать GainNodes и OscillatorNodes в функции BS .onMessage.addListener, чтобы избежать «одноразового использования» этих узлов.
При испытании не генерируются тоны. Если я остановлю код и перейду к операторам .start() и .stop(), то генерируются тональные сигналы. Если я позволю коду свободно запускать через .start() и .stop() и точку останова сразу после .stop(), никаких тонов. Я подозревал проблемы с областью и пытался создавать .createGain() и .createOscillator(), создавая локальные (var) и глобальные (без var) переменные, но это не изменяет поведение.
Если я помещаю все создание объекта AC в функцию слушателя, он отлично работает, но я вернусь к выходу из AC.
Код сценария BS выше
Tried 'var audioContext = audioContext || новое окно.AudioContext'? –