Java soundApi 录制错误
Posted
技术标签:
【中文标题】Java soundApi 录制错误【英文标题】:Java soundApi recording error 【发布时间】:2016-02-28 03:49:38 【问题描述】:我正在尝试使用此代码录制 16khz 单声道 .wav 文件
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.Audiosystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.TargetDataLine;
public class Main
public static void main(String[] args)
System.out.println("Say what you see..");
try
AudioFormat format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, 16000, 8, 1, 4, 16000,
false);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
if (!AudioSystem.isLineSupported(info))
System.out.println("Line not Supported");
final TargetDataLine targetLine = (TargetDataLine) AudioSystem
.getLine(info);
targetLine.open();
System.out.println("Recording");
targetLine.start();
Thread thread = new Thread()
@Override
public void run()
AudioInputStream audioStream = new AudioInputStream(
targetLine);
File audioFile = new File("record.wav");
try
AudioSystem.write(audioStream,
AudioFileFormat.Type.WAVE, audioFile);
catch (IOException ioe)
ioe.printStackTrace();
System.out.println("stopped recording");
;
thread.start();
Thread.sleep(5000);
targetLine.stop();
targetLine.close();
System.out.println("Done");
catch (Exception e)
e.printStackTrace();
当我运行它时,我总是得到这个错误:
Line not Supported
java.lang.IllegalArgumentException: No line matching interface TargetDataLine supporting format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 4 bytes/frame, is supported.at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)at Main.main(Main.java:29)
ps:我用不同的 AudioFormat 参数对其进行了多次测试它只有在我尝试了立体声和 44.1khz 的这些参数时才有效
AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100,16,2,4,44100,false);
【问题讨论】:
【参考方案1】:您必须指定与TargetDataLine
支持的格式之一匹配的AudioFormat
。
例如我 Mac 上的麦克风支持:
“未知采样率”表示采样率无关紧要。
我在这里看到的主要区别是您指定每帧 4 个字节,对于 8 位单声道,这应该是每帧 1 个字节。
【讨论】:
@QA_Col 查看我的回答here以上是关于Java soundApi 录制错误的主要内容,如果未能解决你的问题,请参考以下文章
Android 媒体录制:java.lang.RuntimeException:启动失败