如何录制我的声音并将其制作成 java 中的文件



我正在尝试这段代码,但是在测试 5 和测试 9 之后,代码似乎在 audioStream.write() 时停止运行。

之后什么都没有

AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);

由程序执行。我该如何解决这个问题,或者有没有其他方法可以录制我的声音?

import javax.sound.sampled.*;
import java.io.*;
public class Mic{

    public static void main(String[] args){
        System.out.println("Sound test starting");
        try {
            AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
            DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
            if(!AudioSystem.isLineSupported(info))
            {
                System.err.println("Line is not supported");
            }
            final TargetDataLine targetLine = (TargetDataLine)AudioSystem.getLine(info); 
            targetLine.open();
            System.out.println("Recording voice");
            targetLine.start();
            Thread thread = new Thread();
            {
                //@Override public void run();
                {
                    AudioInputStream audioStream = new AudioInputStream(targetLine);
                    File audioFile = new File("Recording.wav");
                    System.out.println("test5");
                    try { System.out.println("test9");
                        AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, audioFile);
                        System.out.println("audio writing test");
                    }
                    catch(IOException e){
                        e.printStackTrace();
                    }
                    System.out.println("test6");
                    System.out.println("Recording Stopped");
                }
            };
            thread.start();
            Thread.sleep(5000);
            targetLine.stop();
            targetLine.close();
            System.out.println("Ended sound test");
        }
        catch(InterruptedException ie){
            ie.printStackTrace();
        }
        catch(LineUnavailableException e){
            e.printStackTrace();
        }
    }

}
有两种

可能的事情可能发生:

  • write呼叫可能会永远阻塞。

  • write调用可能会引发一些未经检查的异常,这些异常未报告。

暂时更改此设置:

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

对此:

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

并向我们展示现在获得输出的堆栈跟踪(如果有)。


这是另外几种可能性:

您正在调用的write操作实际上是从audioStream到文件的副本:

  • 如果源(audioStream)设置不正确,则在从输入设备读取数据时,write实际上可能会被阻止。

  • 你检查过输出文件吗? 有没有写过什么? 可能是录制过程正在工作...

无论哪种方式,我要做的下一件事是在调试器下运行它,并尝试弄清楚write调用在(显然)被阻止时正在做什么。

相关内容

  • 没有找到相关文章

最新更新