读书人

用Java录音,该怎么处理

发布时间: 2012-01-22 22:38:43 作者: rapoo

用Java录音
在application中,要如何实现Java的录音啊。
程序运行在linux环境中。
有做过类似的功能的兄弟,给个例子。谢过了。

[解决办法]
JMF 实现,音频传输都没问题,去SUN网站研究下吧
[解决办法]
没做过,up
[解决办法]
import java.io.*;
import javax.sound.sampled.*;
import javax.sound.sampled.spi.*;//前置理

public class JDKAudioRecorder extends Thread
{
//生TargetDataLine的m_targetdataline
static TargetDataLine m_targetdataline;

//透TargetDataLine介面(承自DataLine)音效卡通 target目

//生AudioFileFormat.Type的m_targetType Format格式
static AudioFileFormat.Type m_targetType;

//生AudioInputStream的m_audioInputStream stream流
static AudioInputStream m_audioInputStream;

static File m_outputFile;//生File的 m_outputFile

static boolean m_bRecording;//後面需用到布林函 True,False

public JDKAudioRecorder(TargetDataLine line, AudioFileFormat.Type targetType, File file)
{
m_targetdataline = line;
m_audioInputStream = new AudioInputStream(line);
m_targetType = targetType;
m_outputFile = file;
}

public static void AudioRecorder()
{
String Filename = "JDKAudioRecord.wav ";
File outputFile = new File(Filename);

//我一始先在主程式指定音的名
//JDKAudioRecorder.wav
// String Filename = "JDKAudioRecord.wav ";
//接著指定存的料,存在相同的料
// FileoutputFile = new File(Filename);

AudioFormat audioFormat = null;
audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100.0F, 16, 2, 4, 44100.0F, false);

//再定和取得音效的性
// audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100.0F, 16, 2, 4, 44100.0F, false);

DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);
TargetDataLine targetDataLine = null;

//然後透TargetDataLine介面(承自DataLine)音效卡通
// DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);
// 接著做例外理,音置出或其他因素致音功能法被行,程式被止

try
{
targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
targetDataLine.open(audioFormat);// try{ }可能生例外的述

} catch (LineUnavailableException e)//catch{ }理方法

{
System.out.println( "法音,音失 ");
e.printStackTrace();
System.exit(-1);
}

AudioFileFormat.Type targetType = AudioFileFormat.Type.AU;
JDKAudioRecorder recorder = null;

recorder = new JDKAudioRecorder(targetDataLine, targetType, outputFile);
recorder.start();
}

public void start()
{
m_targetdataline.start();
super.start();
}

public static void stopRecording()
{
m_targetdataline.stop();
m_targetdataline.close();
m_bRecording = false;
}

public void run()
{
try
{
AudioSystem.write(m_audioInputStream, m_targetType, m_outputFile);
System.out.println( "after write() ");
} catch (IOException e)
{
e.printStackTrace();
}
}

}
//一切ok後,始呼叫DataLine中的start()method即可
//始音,停止音透stopRecording()method
// public void start()
//{
//m_targetdataline.start();
//}
// public static void stopRecording()
//{
//m_targetdataline.stop();
//}

读书人网 >J2SE开发

热点推荐