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:启动失败

jmeter+badboy录制脚本

我在用loadrunner录制脚本,然后运行之后,就出现下面的结果,提示错误!

录制音频时出现Android SIGSEGV错误

Livecode 错误 -231 开始录制

在 Android 应用程序中录制媒体时崩溃