java 通话录音_Java 实现麦克风自动录音
最近在研究语音识别,使用百度的sdk。发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件。
先上代码:
public class EngineeCore {
String filePath = "E:\\voice\\voice_cache.wav";
AudioFormat audioFormat;
TargetDataLine targetDataLine;
boolean flag = true;
private void stopRecognize() {
flag = false;
targetDataLine.stop();
targetDataLine.close();
}private AudioFormat getAudioFormat() {
float sampleRate = 16000;
// 8000,11025,16000,22050,44100
int sampleSizeInBits = 16;
// 8,16
int channels = 1;
// 1,2
boolean signed = true;
// true,false
boolean bigEndian = false;
// true,false
return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
}// end getAudioFormat
private void startRecognize() {
try {
// 获得指定的音频格式
audioFormat = getAudioFormat();
DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
// Create a thread to capture the microphone
// data into an audio file and start the
// thread running. It will run until the
// Stop button is clicked. This method
// will return after starting the thread.
flag = true;
new CaptureThread().start();
} catch (Exception e) {
e.printStackTrace();
} // end catch
}// end captureAudio method
class CaptureThread extends Thread {
public void run() {
AudioFileFormat.Type fileType = null;
File audioFile = new File(filePath);
fileType = AudioFileFormat.Type.WAVE;
//声音录入的权值
int weight = 2;
//判断是否停止的计数
int downSum = 0;
ByteArrayInputStream bais = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
AudioInputStream ais = null;
try {
targetDataLine.open(audioFormat);
targetDataLine.start();
byte[] fragment = new byte[1024];
ais = new AudioInputStream(targetDataLine);
while (flag) {
targetDataLine.read(fragment, 0, fragment.length);
//当数组末位大于weight时开始存储字节(有声音传入),一旦开始不再需要判断末位
if (Math.abs(fragment[fragment.length-1]) > weight || baos.size() > 0) {
baos.write(fragment);
System.out.println("守卫:"+fragment[0]+",末尾:"+fragment[fragment.length-1]+",lenght"+fragment.length);
//判断语音是否停止
if(Math.abs(fragment[fragment.length-1])<=weight){
downSum++;
}else{
System.out.println("重置奇数");
downSum=0;
} //计数超过20说明此段时间没有声音传入(值也可更改)
if(downSum>20){
System.out.println("停止录入");
break;
}
}
}
//取得录音输入流
audioFormat = getAudioFormat();
byte audioData[] = baos.toByteArray();
bais = new ByteArrayInputStream(audioData);
ais = new AudioInputStream(bais, audioFormat, audioData.length / audioFormat.getFrameSize());
//定义最终保存的文件名
System.out.println("开始生成语音文件");
AudioSystem.write(ais, AudioFileFormat.Type.WAVE, audioFile);
downSum = 0;
stopRecognize();
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭流
try {
ais.close();
bais.close();
baos.reset();
} catch (IOException e) {
e.printStackTrace();
}
}
}// end run
}// end inner class CaptureThread
接下来测试
public static void main(String args[]) {
EngineeCore engineeCore = new EngineeCore();
engineeCore.startRecognize();
}
当有较高的声音传入麦克风时,targetDataLine读取的字节数组首位或末位绝对值会变大(位置取决于音频格式中的一些参数,如bigEndian)。传入音量低,绝对值会变小
录音开始。从targetDataLine中读取的音频数据被保存在ByteArrayOutputStream中。一段时间音量一直低于权值时,认为无声音传入,结束录音。从ByteArrayOutputStream取出字节数组,
转为音频保存在本地文件中。
注意:
从targetDataLine读取的字节数组不能直接用于百度等语音识别,需要先转为音频文件,然后读取音频文件生成的字节数组,才可用于语音识别。
以上就是Java 实现麦克风自动录音的详细内容,更多关于Java 麦克风自动录音的资料请关注脚本之家其它相关文章!
java 通话录音_Java 实现麦克风自动录音相关推荐
- java 调用麦克风录音_Java 实现麦克风自动录音
最近在研究语音识别,使用百度的sdk.发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件. 先上代码: public class EngineeCore { String ...
- java 网页 录音_Java+FlashWavRecorder实现网页录音并上传
[注意] [前言] 肯定有需求要网页录音,并且要上传.这奇葩需求. 然后找到了FlashWavRecorder, [原始版本号] 1.下载 在上面的地址下载zip解压之后,目录里面有个index.ht ...
- h5打开麦克风权限录音_h5打开麦克风权限录音_通过H5实现html页面的录音和播放 (Recorder用于html5录音)......
varrec;/**调用open打开录音请求好录音权限**/ var recOpen=function(success){//一般在显示出录音按钮或相关的录音界面时进行此方法调用,后面用户点击开始录音 ...
- java实现麦克风自动录音
最近在研究语音识别,使用百度的sdk.发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件. 先上代码: public class EngineeCore {String ...
- h5打开麦克风权限录音_h5打开麦克风权限录音_原来电脑上自带录音功能,很多人还不知道,真的太实用了......
众所周知,我们的手机上一般都会带有录音功能,那么如果你使用的是电脑,想要在电脑上录音该怎么办呢?下面就来教你两种方法. 一.系统自带录音 1.这里就以Win10系统为例,首先按下组合键[Win+S], ...
- 如何恢复录音删除的录音文件_电脑录音软件如何定时自动录音
01最近小编有很多朋友都在咨询关于定时录音的问题,我想他们可能也是看中了本人的才华和美貌,所以才来咨询鄙人.所以,我一定不负众望,好好的教大家如何实现这个问题!02据我所知(鄙人才疏学浅),手机上估计 ...
- java 输入提示_Java实现输入自动提示与补全功能
一. 场景与目标 在使用 IDE 开发软件时, IDE 会提供一种"智能提示", 根据所输入的字符列出可能的词组: 在日常Web开发中,根据用户输入进行自动提示和补全,也能很好地改 ...
- java jtextarea 滚动条_Java Swing JTextArea自动添加滚动条
项目需要,现学一下. 默认没有WindowsBuilder Edit插件,需要从网上下一个:http://download.eclipse.org/windowbuilder/WB/integrati ...
- java补空格_JAVA STRING 对象自动补齐空格
之所以补空格因为 该长度不一的时候 有时候会导致 ORACLE数据库的子SQL 变得很多多. 导致非常慢. ORACLE 11G 11.2.01 打补丁风险太大 只好补空格让其一直. 注意采用的字节长 ...
- c++ 实现录音并且指定到文件_通话自动录音,留下美好回忆,记录完整录音证据...
手机通话,如果自动录音多好,许多人与我一样抱有这个想法. 记得华为Android版本5.0时代,手机没有自动录音功能,我一直到网上下载自动通话录音软件,有时甚至是下载ROOT版的带自动通话功能的EMU ...
最新文章
- python数据分析第三方库是_python数据分析复盘——数据分析相关库之Pandas
- linux web服务器系统优化,Ubuntu WEB服务器参数优化
- 使用 RMAN 同步数据库
- 《.NET Core 和前后端那些事儿》技术交流活动纪实
- 查看mysql主从复制是否成功的命令_mysql主从复制 - hong查理的个人空间 - OSCHINA - 中文开源技术交流社区...
- c# 前导0_C#| 用前导零填充整数
- 浏览器解析JavaScript的原理
- 单页面响应式模板:黑石
- linux运维中的中间件,linux中间件Nginx的安装过程
- Windows 10某个网络端口被占用怎么办?
- pytest执行时,报report.html错误
- python图片压缩算法_Python实现奇异值分解(SVD)压缩图片
- python接口自动化学习笔记1
- 了解贝尔曼·福特算法
- 《实用C++》第10课:if 语句实现关系运算
- 如何利用云服务器搭建个人网站
- android 字体加下划线,如何在Android TextView中将字体样式设置为粗体,斜体和下划线?...
- 计算机英语读音在线,365英语之128.计算机
- 软件测试个人成长情况 能力 心理心态,提高软件测试团队能力和个人能力之浅见...
- json对象和字符串相互转换
热门文章
- VS2017调用Matlab2016b进行绘图
- 联想拯救者wif开不了_联想拯救者wifi开关
- MySql安装 Staring the server出错
- Java //PP2.11 编写一个程序,提示输入一个代表总钱数的双精度值,然后确定每种纸币和硬币需要的最少数量以达到输入的总钱数(假设10美元纸币为所需要的最大面额)。例如,如果输入的值为47.63
- Spring Boot(二):外部配置文件(超级详细)
- (数位dp) 算法竞赛入门到进阶 书本题集
- macos安装盘第三方工具制作_如何制作macOS High Sierra USB启动安装盘
- 别再用mybatis了,mybatis-plus 这个神级工具一发入魂
- 2010年3月份中国物流与采购联合会发布中国制造业采购经理指数为55.1%
- Linux下配置DNS服务器