【发布时间】:2020-01-05 01:30:12
【问题描述】:
我正在使用 Selenium 在具有音频聊天的网络上模拟用户。我需要模拟用户通过麦克风讲话。
我只收到了关于在 javascript 中收听麦克风的问题,但没有关于使用 javascript 通过麦克风发送声音的问题。
我目前的尝试是这样的:
首先我检查 AudioContext 是否可用
private boolean isAudioContextSupported() {
JavascriptExecutor js = (JavascriptExecutor) getDriver();
Object response = js.executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"var context;" +
"try {" +
" window.AudioContext = window.AudioContext||window.webkitAudioContext;" +
" context = new AudioContext();" +
" callback('');" +
"}" +
"catch(e) {" +
" callback('Web Audio API is not supported in this browser');" +
"}");
String responseAsString = response == null?"":(String)response;
return responseAsString.isEmpty();
}
其次,我尝试这样做以从 url 获取音频
JavascriptExecutor js = (JavascriptExecutor) getDriver();
Object response = js.executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"window.AudioContext = window.AudioContext || window.webkitAudioContext;" +
"var context = new AudioContext();" +
"var url = '<ogg file url>';" +
"var request = new XMLHttpRequest();" +
"request.open('GET', url, true);" +
"request.responseType = 'arraybuffer';" +
"request.onload = function() {" +
" context.decodeAudioData(request.response, function(buffer) {" +
" <send the buffer data through the microphone>" +
"}, callback(request.statusText));" +
"};" +
"request.send();" +
"callback('OK');"
);
我缺少的部分是如何通过麦克风发送缓冲区数据(从 ogg 文件中获取)。
编辑:
Chrome: fake microphone input for test purpose 中的答案没有回答这个问题,我已经看过了。
编辑 2:
有几点需要考虑:
1) 我正在寻找的解决方案可能包括使用其他语言或工具。
2) 我无法使用硬件来模拟麦克风输入(例如:通过扬声器输出声音以便麦克风可以拾取)
【问题讨论】:
-
所提供的链接没有回答问题,它只是显示
--use-fake-device-for-media-stream选项,而实际上没有提供发送声音的方法。该答案中的链接是使用java通过麦克风发送声音的代码。 -
Java标签无效,如果读取代码,主要问题在javascript中,java代码只是一个包装器。
标签: javascript selenium webrtc web-audio-api