java实现动态录音,声卡有声音进来就自动录音

flashhero 2011-04-08 11:07:33
对讲机声音直接连在电脑的声卡的麦克风上,要求实现java发现有声音后能自动采集录音。

请问sound的哪个类可以实现,请教高手!

最好给出详细源码,谢谢!
...全文
562 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxwswzq 2013-05-19
  • 打赏
  • 举报
回复
楼主,你问题解决了吗?可不可以共享一下,我也需要,QQ:905221117
flashhero 2011-05-06
  • 打赏
  • 举报
回复
请教,能否给出代码
[Quote=引用 16 楼 kevin90828 的回复:]
如果要实现这样的功能,可以考虑使用JMF
[/Quote]
flashhero 2011-05-06
  • 打赏
  • 举报
回复
我看这个方法
getLevel
float getLevel()获得行的当前音量级别。此级别是对信号的当前振幅的测量,且不应该与音量控制的当前设置混淆。范围从 0.0(静)到 1.0(声音波形的最大可能振幅)。该单位测量线性振幅,不测量分贝数。
domonate 2011-05-03
  • 打赏
  • 举报
回复
也期待一下有没有好的解决办法!
Kevin-Kung 2011-05-03
  • 打赏
  • 举报
回复
如果要实现这样的功能,可以考虑使用JMF
wanwang8 2011-04-20
  • 打赏
  • 举报
回复
不是java的优势,期待大牛
wenbodong 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 flashhero 的回复:]
好像只实现了有声音就录音,没实现“没声音就结束” ,
就是有人呼叫就开始一段录音,呼叫完毕就结束这段录音。

引用 4 楼 wenbodong 的回复:
[/Quote]
楼主,我的程序只是给你看看录音和播放的方法,不是针对你的要求写的
flashhero 2011-04-20
  • 打赏
  • 举报
回复
好像只实现了有声音就录音,没实现“没声音就结束” ,
就是有人呼叫就开始一段录音,呼叫完毕就结束这段录音。
[Quote=引用 4 楼 wenbodong 的回复:]
[/Quote]
flashhero 2011-04-20
  • 打赏
  • 举报
回复
有声音就录音 没声音就结束
flashhero 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wenbodong 的回复:]
说明一下,你说要实现发现声音后自动录音,这个发现声音本来就需要一个界限,即你规定:采集到的声音数据的强度为多少时(当然,你可以选择采集很多数据取平均值)为有声音,并且把这此数据存入你的数据区。不过你要知道,其实你是在不停地采集声音的,即你不停地在录音。只不过你可以通过判断,决定是否将录入的声音数据存入某个数据区或者输出。
[/Quote]
谢谢 我也是这个想法
maxinliangGenius 2011-04-19
  • 打赏
  • 举报
回复
java 应该本身不能操作 这些,你可以查找第三方包或着用JTA调用dll 实现。
monalions 2011-04-19
  • 打赏
  • 举报
回复
貌似需要外接其他的硬件设备,才能辅助进行录音。我也在开发类似的功能,现在也是对录音功能比较挠头。关注中,如果哪位高人有办法,希望能指点一下。
flashhero 2011-04-19
  • 打赏
  • 举报
回复
自己在顶顶~~求大能
hackerhs 2011-04-19
  • 打赏
  • 举报
回复
java 做这些事情很难哦. .. . java优势不是干这行的 . .
wenbodong 2011-04-19
  • 打赏
  • 举报
回复
说明一下,你说要实现发现声音后自动录音,这个发现声音本来就需要一个界限,即你规定:采集到的声音数据的强度为多少时(当然,你可以选择采集很多数据取平均值)为有声音,并且把这此数据存入你的数据区。不过你要知道,其实你是在不停地采集声音的,即你不停地在录音。只不过你可以通过判断,决定是否将录入的声音数据存入某个数据区或者输出。
wenbodong 2011-04-19
  • 打赏
  • 举报
回复
TargetDataLine是声音的输入(麦克风),而SourceDataLine是输出(音响,耳机).
整个过程,请参见下面的程序.(运行后,实时地从麦克风录音,实时输出).如果有不明白的,可以加我QQ:815611030.加我的时候,注明一下:Java讨论(嘿嘿,总有些无聊的人,天天乱加人,加了又不说话,所以我不随便加人的).

import java.io.*;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.TargetDataLine;
public class RecordAndPlay {
static volatile boolean stop=false;
public static void main(String[] args) {
Play();
}
//播放音频文件
public static void Play() {

try {
AudioFormat audioFormat =
// new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100F,
// 8, 1, 1, 44100F, false);
new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100F, 16, 2, 4,
44100F, true);
DataLine.Info info = new DataLine.Info(TargetDataLine.class,
audioFormat);
TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
targetDataLine.open(audioFormat);
final SourceDataLine sourceDataLine;
info = new DataLine.Info(SourceDataLine.class, audioFormat);
sourceDataLine = (SourceDataLine) AudioSystem.getLine(info);
sourceDataLine.open(audioFormat);
targetDataLine.start();
sourceDataLine.start();
FloatControl fc=(FloatControl)sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);
double value=2;
float dB = (float)
(Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);
fc.setValue(dB);
int nByte = 0;
final int bufSize=4*100;
byte[] buffer = new byte[bufSize];
while (nByte != -1) {
//System.in.read();
nByte = targetDataLine.read(buffer, 0, bufSize);
sourceDataLine.write(buffer, 0, nByte);
}
sourceDataLine.stop();

} catch (Exception e) {
e.printStackTrace();
}
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧