模拟麦克风输入

2024-01-28

我正在尝试编写一个小程序来读取 wav 文件并发送输出,就好像它来自我的麦克风一样。不幸的是我对声音 API 没有太多经验。

背景:我基本上想要实现的是一个在我进行语音聊天时播放声音的程序(即 Teamspeak、Ventrilo)。为了让它现在工作,我必须将录音设备切换到“你听到的”,播放声音,然后切换回麦克风。该程序应该模拟来自麦克风的输入。

到目前为止,我除了播放声音之外无法做任何进一步的事情。我想我只需要一个不同的 SourceLine ?

public class Player {
private final int BUFFER_SIZE = 128000;
private AudioInputStream audioStream;
private AudioFormat audioFormat;
private SourceDataLine sourceLine;

public void playSound(File soundFile) {
    try {
        audioStream = AudioSystem.getAudioInputStream(soundFile);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }
    audioFormat = audioStream.getFormat();
    DataLine.Info infoIn = new DataLine.Info(SourceDataLine.class,
            audioFormat);
    try {
        sourceLine = (SourceDataLine) AudioSystem.getLine(infoIn);
        sourceLine.open(audioFormat);
    } catch (LineUnavailableException e) {
        e.printStackTrace();
        System.exit(1);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }

    sourceLine.start();

    int nBytesRead = 0;
    byte[] abData = new byte[BUFFER_SIZE];
    while (nBytesRead != -1) {
        try {
            nBytesRead = audioStream.read(abData, 0, abData.length);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (nBytesRead >= 0) {
            @SuppressWarnings("unused")
            int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
        }
    }
    sourceLine.drain();
    sourceLine.close();
}
 }

解决方案:安装 VB 音频线(http://vb-audio.pagesperso-orange.fr/Cable/ http://vb-audio.pagesperso-orange.fr/Cable/)。这是捐赠软件。制作VB-Output标准录音设备。在麦克风属性中选择 VB-Input 作为播放。

public class Player {
private final int BUFFER_SIZE = 128000;
private AudioInputStream audioStream;
private AudioFormat audioFormat;
private SourceDataLine sourceLine;

public void playSound(File soundFile) {
    try {
        audioStream = AudioSystem.getAudioInputStream(soundFile);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }
    audioFormat = audioStream.getFormat();
    DataLine.Info infoIn = new DataLine.Info(SourceDataLine.class,
            audioFormat);
    try {
        Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
        Mixer mixer = null;
        for (int i = 0; i < mixerInfos.length; i++) {
            System.out.println(mixerInfos[i].getName());
            if (mixerInfos[i].getName().equals(
                    "CABLE Input (VB-Audio Virtual Cable)")) {
                mixer = AudioSystem.getMixer(mixerInfos[i]);
                break;
            }
        }
        sourceLine = (SourceDataLine) mixer.getLine(infoIn);
        sourceLine.open(audioFormat);
    } catch (LineUnavailableException e) {
        e.printStackTrace();
        System.exit(1);
    }
    sourceLine.start();
    int nBytesRead = 0;
    byte[] abData = new byte[BUFFER_SIZE];
    while (nBytesRead != -1) {
        try {
            nBytesRead = audioStream.read(abData, 0, abData.length);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (nBytesRead >= 0) {
            @SuppressWarnings("unused")
            int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
        }
    }
    sourceLine.drain();
    sourceLine.close();
}
}

您可以安装一些程序,例如虚拟音频电缆,并将音乐播放器中的播放声音重定向到虚拟输入。在您的程序中,您必须收听该虚拟输入源,并且可以将测试重定向到普通耳机或扬声器接收的信号或将其保存到文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模拟麦克风输入 的相关文章

  • Java 迭代器获取下一个而不递增

    我正在用 Java 编写以下循环 对于每个循环 我想访问链表 r 的当前元素和下一个元素 List
  • 谁能解释一下 servlet 映射吗?

    我正在尝试使用 SpringMVC 编写一个 Web 应用程序 通常我只是将一些虚构的文件扩展名映射到 Spring 的前端控制器并快乐地生活 但这次我要使用类似 REST 的 URL 没有文件扩展名 将我的上下文路径下的所有内容映射到前端
  • 如何在 Groovy 中的 JSON Converter 方法中保留字母大小写?

    我正在尝试将 groovy 对象解析为 JSON 属性名称不遵循正确的驼峰式大小写形式 class Client String Name Date Birthdate 当我使用这个时 Client client new Client Nam
  • 无法从 TemporalAccessor 获取 OffsetDateTime

    当我这样做时 String datum 20130419233512 DateTimeFormatter formatter DateTimeFormatter ofPattern yyyyMMddHHmmss withZone ZoneI
  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件。问题

    我的 android studio 遇到了下一个问题 导致 org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveEx
  • 按对象值分组,统计后按最大对象属性设置组键

    我设法使用 Java 8 Streams API 编写了一个解决方案 该解决方案首先按对象 Route 的值对列表进行分组 然后计算每组中的对象数量 它返回一个映射 Route gt Long 这是代码 Map
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 文件保存在文件系统中 VS 保存在数据库中

    我正在设计一个 servlet 或 Struts2 中的操作 用于文件 图像 文档等 下载 但我想知道哪种更好的方法可以将文件保留在文件系统和数据库中 只需保留文件的路径或将文件保留在数据库中 如 BLOB 我知道当我查询数据库时 哪里的
  • Java - 同步方法导致程序大幅减慢

    我正在尝试了解线程和同步 我做了这个测试程序 public class Test static List
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • Keycloak 社交登录 REST API

    我已经为我的 keycloak 实例启用了谷歌社交登录 但我需要将其用作休息服务 是否有可用于执行此操作的端点 Keycloak 中没有 Google 身份验证 API 但您可以使用以下方法解决它代币交换 https www keycloa
  • 如何将 currentTimeMillis 转换为可读的日期格式? [复制]

    这个问题在这里已经有答案了 我想用currentTimeMillis两次 这样我就可以计算持续时间 但我也想以用户可读的格式显示时间和日期 我遇到了麻烦currentTimeMillis有利于计算 但我看不到内置函数可以转换为合适的时间或时
  • 如何减少 JSF 中的 javax.faces.ViewState

    减少 JSF 中视图状态隐藏字段大小的最佳方法是什么 我注意到我的视图状态约为 40k 这会在每次请求和响应时下降到客户端并返回到服务器 特别是到达服务器时 这对用户来说会显着减慢 我的环境 JSF 1 2 MyFaces Tomcat T
  • 如何在 Spring Boot 中创建 Apache POI Excel 视图配置

    当我想使用 Spring Boot Web 将数据导出到 Excel 时遇到问题 我使用 Thymeleaf 作为模板引擎 由 Spring Boot 自动配置 但是当我在附加配置中添加 XmlViewResolver 时 由 XmlVie
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • 如何获取队列中的第 n 个项目?

    我的应用程序中有许多队列和优先级队列 我想轻松访问这些队列中的第 n 个项目 但没有看到使用 API 实现此目的的简单方法 我想我可以创建一个Iterator并迭代到第 n 个元素或使用toArray index 但似乎应该有一个更简单的方
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • HashSet 与 LinkedHashSet

    它们之间有什么区别 我知道 LinkedHashSet 是 HashSet 的有序版本 维护一个跨所有元素的双向链接列表 使用此类代替 HashSet 当您关心迭代顺序时 当你迭代 HashSet 时 顺序是不可预测的 而 LinkedHa
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152

随机推荐

  • 如何以编程方式检测操作系统 (Windows) 何时唤醒或进入睡眠状态

    背景 我儿子喜欢在不应该使用笔记本电脑的时候使用他的笔记本电脑 我只是想如果我可以编写一个应用程序 每当他打开 关闭笔记本电脑时就会向我发送电子邮件 这会很方便 我什至愿意接受当机器上有网络流量时通知我的东西 Question 如何以编程方
  • BCrypt 性能恶化

    我们在 Jboss 服务器 6 1 中运行三个 Web 应用程序 标准 Spring MVC Hibernate 所有三个应用程序共享一个通用的身份验证方法 该方法被编译为 JAR 并包含在每个 WAR 文件中 我们的身份验证方法使用 or
  • 格式化字母数字字符串

    我有一个包含 16 个字母数字字符的字符串 例如F4194E7CC775F003 我想将其格式化为 F419 4E7C C775 F003 我尝试使用 string Format 0 F4194E7CC775F003 但这不起作用 因为它不
  • Sublime Text 是否支持 CSS/SASS 文件的实时编辑?

    Sublime Text 支持文件实时编辑吗 我正在寻找更好的工作流程 我真的很喜欢 Sublime Text 但最近我被 Codepen io 和 最近测试的 Adobe Brackets 等工具的 实时编辑 功能宠坏了 当我回到 Sub
  • Boost Python 的性能

    我正在做一个项目 正在尝试使用 boost python 当研究如何组织我的 python 界面时 我遇到了一个问题comment https stackoverflow com questions 4774807 how to organ
  • 立即应用用户界面更改

    我正在 Android 上编写一些 ui 屏幕 有时我需要立即查看 ui 更改 但可以在下一个 ui 线程请求中看到该更改 因此 例如 如果我删除屏幕上的一个视图并以编程方式添加另一个视图 然后更改整个视图 使用 viewAnimator
  • 节点的 xlabels 与点中的边缘重叠

    我尝试使用 dot 绘制图表 但遇到以下问题 节点的标签b与边缘重叠a to b 有没有办法以某种方式移动这个标签来避免这种情况 这是我用来生成图像的代码 使用dot digraph A rankdir LR center true mar
  • 是否需要担心“解析器规则中的隐式标记定义”?

    我正在使用 ANTLR 和 ANTLRWorks 2 创建我的第一个语法 我已经完成了语法本身 它识别用所描述的语言编写的代码并构建正确的解析树 但除此之外我还没有开始任何事情 让我担心的是 解析器规则中第一次出现的标记都会用黄色曲线下划线
  • 用 C++ 读取配置 xml 文件

    如何在C 中读取以下配置文件 STL有支持吗 我无法使用其他第三方库
  • 动画 UIButton Down - Xcode

    我想知道当点击时如何使 UIButton 向下动画 IBAction 提前致谢 在你的里面IBAction UIButton button UIButton sender animates button 25 pixels right an
  • 将寄存器加载到自身的指令的目的是什么?

    在查看 Gameboy 的指令集时 我遇到了如下指令 LD A A LD B B LD C C LD D D 每条指令都有自己的操作码这张桌子 http www pastraiser com cpu gameboy gameboy opco
  • Apollo 客户端错误:无法在上下文中找到“客户端”或作为选项传入。将根组件包装在

    我是新来的阿波罗 我目前正在尝试使用 React 和 Apollo 创建一个应用程序 当我启动我的应用程序时 出现以下错误 在上下文中找不到 客户端 或作为选项传入 将根组件包装在 中 或通过选项传递 ApolloClient 实例 Her
  • 64 位 Windows 的 cygwin 1.7.26 中的 rxvt-native 实用程序在哪里?

    我一直在 cygwin 上使用 rxvt native 程序 我安装了 64 位 cygwin 但在其中找不到 rxvt 包 我安装了相同版本的32位cygwin 看起来它仍然存在 有人知道为什么这个软件包不能用于 64 位 cygwin
  • 如果延迟超过 2147483648 毫秒,setTimeout 会立即触发

    问题 If the delay超过 2147483648 毫秒 24 8551 天 该函数将立即触发 Example setTimeout function console log hey 2147483648 this fires ear
  • Jquery,将标题转换为 Slug

    我有一个执行以下操作的 PHP 脚本 它接受一个字符串 例如 This is a Great Blog Post 1 并返回以下字符串 this is a great blog post 1 我不完全是 Jquery 专家 这就是我问这个问
  • Python-MySQL 中的错误处理

    我正在运行一个基于 python Flask 的小型 Web 服务 我想在其中执行一个小型 MySQL 查询 当我获得 SQL 查询的有效输入时 一切都按预期工作 并且我得到了正确的值 但是 如果该值未存储在数据库中 我会收到一个TypeE
  • 如何使用模板根据类型将元素添加到各种容器

    我有一个相当愚蠢的问题 但我希望你能帮助我 我有包含多个向量的类 并且这些向量具有不同的存储类型 class BaseClass std string Name class B public BaseClass class C public
  • 两栏布局,固定右栏

    我被一个看似简单的两列 CSS 布局所困扰 通常 这种布局很简单 但我正在构建一个响应式网站 需要各列以移动设备的正确顺序折叠 彼此重叠 在桌面上 我需要右列的大小固定 例如 200px 其余区域由左列占据 当然 我需要这些列来清除并将内容
  • Python 中用于日志记录替代功能的配置文件

    我有功能 def go logger logfilename formatter logging Formatter asctime s levelname s message s logging basicConfig filemode
  • 模拟麦克风输入

    我正在尝试编写一个小程序来读取 wav 文件并发送输出 就好像它来自我的麦克风一样 不幸的是我对声音 API 没有太多经验 背景 我基本上想要实现的是一个在我进行语音聊天时播放声音的程序 即 Teamspeak Ventrilo 为了让它现