录音过程中出现异常......!

时间:2011-01-01 17:22:21

标签: java audio

我做了一个录音程序......检查一下

import java.io.*;
import javax.sound.sampled.*;
public class pp extends Thread
{
    TargetDataLine tdl;
    AudioFileFormat.Type afft;
    AudioInputStream ais;
    File f1;
    public pp(TargetDataLine l,AudioFileFormat.Type t,File f2)
    {
        tdl=l;
        ais=new AudioInputStream(tdl);
        t=afft;
        f1=f2;
    }
    public void start()
    {
        tdl.start();
        super.start();
    }
    public void sr()
    {
        tdl.stop();
        tdl.close();
    }
    public void run()
    {
        try
        {
            AudioSystem.write(ais,afft,f1);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            System.out.println("Exception caught ");
        }
    }
        public static void main(String args[])
        {
            String s=args[0];
            File f=new File(s);
            AudioFormat ff=new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100.0F, 16, 2, 4, 44100.0F, false);
            DataLine.Info inf=new DataLine.Info(TargetDataLine.class,ff);
            TargetDataLine td=null;
            try
            {
                td=(TargetDataLine)AudioSystem.getLine(inf);
                td.open(ff);
            }
            catch(Exception e)
            {
                //e.printStackTrace();
                System.out.println("Exception caught ");
            }
            AudioFileFormat.Type t5=AudioFileFormat.Type.AIFC;
            pp p=new pp(td,t5,f);
            System.out.println("enter to start recording");
            try
            {
                System.in.read();
            }
            catch(Exception e)
            {
                System.out.println("exception caught ");
            }
            p.start();
            System.out.println("enter to stop recording");
            try
            {
                System.in.read();
            }
            catch(Exception e)
            {
                System.out.println("exception caught ");
            }
            p.sr();
            System.out.println("recording stoped");
        }
}

它会显示一个例外......

java.lang.IllegalArgumentException: could not write audio file: file type not supported: null
    at javax.sound.sampled.AudioSystem.write(AudioSystem.java:1363)
    at pp.run(pp.java:30)

任何人都可以帮我解决这个问题.... !!

1 个答案:

答案 0 :(得分:30)

这是你的错误:

public pp(TargetDataLine l,AudioFileFormat.Type t,File f2)
{
    tdl=l;
    ais=new AudioInputStream(tdl);
    // This line doesn't do anything useful, does it?
    t=afft;
    f1=f2;
}

而不是

t = afft;

参数值设置为实例变量值,您希望它反过来:

afft = t;

当然,您可以使用更清晰的名称,并为参数和实例变量使用相同的名称,然后使用this指定要使用的名称:

public AudioRecorder(TargetDataLine inputLine,
                     AudioFileFormat.Type fileType
                     File outputFile)
{
     this.inputLine = inputLine;
     this.inputStream = new AudioInputStream(inputLine);
     this.fileType = fileType;
     this.outputFile = outputFile;
}