javascript - 在 javascript 中通过麦克风发送声音
问题描述
我正在使用 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中的答案:用于测试目的的假麦克风输入没有回答这个问题,我已经读过那个问题了。
编辑2:
有一些事情需要考虑:
1)我正在寻找的解决方案可以包括使用另一种语言或工具。
2)我不能使用硬件来模拟麦克风输入(例如:通过扬声器输出声音,以便麦克风可以拾取它)
解决方案
我认为您不需要使用 JavascriptExecutor。
您的问题有一个技巧。
解决方案:
改用java。
步骤1:
执行聊天语音监听器。
第2步:
现在以编程方式播放随机语音。
利用:import javazoom.jl.player.Player;
public void playAudio(String audioPath) {
try {
FileInputStream fileInputStream = new FileInputStream(audioPath);
Player player = new Player((fileInputStream));
player.play();
System.out.println("Song is playing");
}catch (Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
第 3 步:
要启用麦克风访问,请使用以下参数:
options.addArguments("use-fake-ui-for-media-stream");
上面的代码将为您播放声音,您的聊天听众可以收听播放的音频。
推荐阅读
- ios - CNLabelPhoneNumber 标签选择器
- delphi - firemonkey idTcp 和记录
- javascript - 使用过滤连接两个数组
- python-3.x - WinAPI:等待文件描述符上的 IO 完成
- ios - 快速启动和停止indicatorView并将其放在中心tableView中
- opengl - How do you implement the rotation of the shape in place and the movement in a rotated state in OpenGL?
- python - 查找排序数组中元素的位置
- elasticsearch - Kibana Filebeat 索引模式不起作用
- oracle - 甲骨文配置。“创建或替换”函数创建无效对象
- javascript - Youtube 视频在浏览器上播放,但不在 electron-js 应用程序上播放