[英]Java Sound Api: Wav file not playing after saving recording on disk
我正在从麦克风录音,并将其另存为.wav文件到磁盘。
我不能用Media Player播放wav文件吗? 这正常吗?
AudioFormat format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
44100.0F, 16, 2, 4, 44100.0F, false);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); // format is an AudioFormat object
// Obtain and open the line.
try {
targetLine = (TargetDataLine) AudioSystem.getLine(info);
targetLine.open(format);
targetLine.start();
ByteArrayOutputStream out = new ByteArrayOutputStream();
int numBytesRead;
byte[] data = new byte[targetLine.getBufferSize() / 5];
targetLine.start();
while (recording) {
numBytesRead = targetLine.read(data, 0, data.length);
out.write(data, 0, numBytesRead);
System.out.println(Arrays.toString(data));
}
File fileOut = new File("C:\\audio\\audio6.wav");
AudioInputStream ais = new AudioInputStream(targetLine);
if (AudioSystem. isFileTypeSupported(AudioFileFormat.Type.WAVE,ais)) {
AudioSystem.write(ais, AudioFileFormat.Type.WAVE, fileOut);
System.out.println("writen");
}
targetLine.stop();
ais.close();
如果文件正常运行,则应该可以在媒体播放器中播放该文件。
我建议您获得免费音频编辑器Audacity(http://audacity.sourceforge.net/)的副本并查看数据。 首先检查文件中是否有一些数据,然后检查字节序,位深度和采样率是否正确(切换并查看是否有明显的噪音)。
如果这样不起作用,请尝试从文件而不是麦克风中读取一些样本,然后在到达另一端时检查它们是否相同。
如果您尚未找到它,那么这对于Java Audio http://www.jsresources.org/是一个很好的资源。
您正在将记录的数据加载到ByteArrayOutputStream中,然后再对其执行任何操作(如Jon Skeet所指出的)。
当“ recording”布尔值为false时,您是否将TargetDataLine附加到AudioInputStream? 但是,如果记录为假,则我假设没有数据通过TDL传输。 数据是通过read()方法从TDL获取的,并且在while循环内。
我认为可以通过ByteArrayInputStream来创建AIS,该方法可以从用于从TDL收集数据的ByteArrayOutputStream进行。
因此,在记录布尔值变为假之后,请尝试通过以下方式制作AIS:
ByteArrayInputStream bais = new ByteArrayInputStream(out.toByteArray());
AudioInputStream ais = new AudioInputStream(bais, format, baos.size());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.