首页 > 解决方案 > 在 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)我不能使用硬件来模拟麦克风输入(例如:通过扬声器输出声音,以便麦克风可以拾取它)

标签: javascriptseleniumwebrtcweb-audio-api

解决方案


我认为您不需要使用 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"); 

上面的代码将为您播放声音,您的聊天听众可以收听播放的音频。


推荐阅读