java类javax.sound.sampled.DataLine的实例源码

DirectAudioDevice.java 文件源码 项目:openjdk-jdk10 阅读 23 收藏 0 点赞 0 评论 0
DirectAudioDevice(DirectAudioDeviceProvider.DirectAudioDeviceInfo portMixerInfo) {
    // pass in Line.Info, mixer, controls
    super(portMixerInfo,              // Mixer.Info
          null,                       // Control[]
          null,                       // Line.Info[] sourceLineInfo
          null);                      // Line.Info[] targetLineInfo

    if (Printer.trace) Printer.trace(">> DirectAudioDevice: constructor");

    // source lines
    DirectDLI srcLineInfo = createDataLineInfo(true);
    if (srcLineInfo != null) {
        sourceLineInfo = new Line.Info[2];
        // SourcedataLine
        sourceLineInfo[0] = srcLineInfo;
        // Clip
        sourceLineInfo[1] = new DirectDLI(Clip.class, srcLineInfo.getFormats(),
                                          srcLineInfo.getHardwareFormats(),
                                          32, // arbitrary minimum buffer size
                                          AudioSystem.NOT_SPECIFIED);
    } else {
        sourceLineInfo = new Line.Info[0];
    }

    // TargetDataLine
    DataLine.Info dstLineInfo = createDataLineInfo(false);
    if (dstLineInfo != null) {
        targetLineInfo = new Line.Info[1];
        targetLineInfo[0] = dstLineInfo;
    } else {
        targetLineInfo = new Line.Info[0];
    }
    if (Printer.trace) Printer.trace("<< DirectAudioDevice: constructor completed");
}
DirectAudioDevice.java 文件源码 项目:openjdk-jdk10 阅读 23 收藏 0 点赞 0 评论 0
protected DirectDL(DataLine.Info info,
                   DirectAudioDevice mixer,
                   AudioFormat format,
                   int bufferSize,
                   int mixerIndex,
                   int deviceID,
                   boolean isSource) {
    super(info, mixer, null, format, bufferSize);
    if (Printer.trace) Printer.trace("DirectDL CONSTRUCTOR: info: " + info);
    this.mixerIndex = mixerIndex;
    this.deviceID = deviceID;
    this.waitTime = 10; // 10 milliseconds default wait time
    this.isSource = isSource;

}
DirectAudioDevice.java 文件源码 项目:openjdk-jdk10 阅读 122 收藏 0 点赞 0 评论 0
private DirectSDL(DataLine.Info info,
                  AudioFormat format,
                  int bufferSize,
                  DirectAudioDevice mixer) {
    super(info, mixer, format, bufferSize, mixer.getMixerIndex(), mixer.getDeviceID(), true);
    if (Printer.trace) Printer.trace("DirectSDL CONSTRUCTOR: completed");
}
DirectAudioDevice.java 文件源码 项目:openjdk-jdk10 阅读 28 收藏 0 点赞 0 评论 0
private DirectTDL(DataLine.Info info,
                  AudioFormat format,
                  int bufferSize,
                  DirectAudioDevice mixer) {
    super(info, mixer, format, bufferSize, mixer.getMixerIndex(), mixer.getDeviceID(), false);
    if (Printer.trace) Printer.trace("DirectTDL CONSTRUCTOR: completed");
}
Mic.java 文件源码 项目:rcom 阅读 20 收藏 0 点赞 0 评论 0
public Mic(Mixer mixer, AudioFormat format, int frameSamples) throws LineUnavailableException {
    super();
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
    t=(TargetDataLine) mixer.getLine(info);
    t.open(format, frameSamples*2);
    System.out.println("Bytebuffer t: "+t.getBufferSize());
}
SoftMixingDataLine.java 文件源码 项目:openjdk-jdk10 阅读 20 收藏 0 点赞 0 评论 0
SoftMixingDataLine(SoftMixingMixer mixer, DataLine.Info info) {
    this.mixer = mixer;
    this.info = info;
    this.control_mutex = mixer.control_mutex;

    controls = new Control[] { gain_control, mute_control, balance_control,
            pan_control, reverbsend_control, chorussend_control,
            apply_reverb };
    calcVolume();
}
SoftMixingMixer.java 文件源码 项目:openjdk-jdk10 阅读 23 收藏 0 点赞 0 评论 0
@Override
public Line getLine(Line.Info info) throws LineUnavailableException {

    if (!isLineSupported(info))
        throw new IllegalArgumentException("Line unsupported: " + info);

    if ((info.getLineClass() == SourceDataLine.class)) {
        return new SoftMixingSourceDataLine(this, (DataLine.Info) info);
    }
    if ((info.getLineClass() == Clip.class)) {
        return new SoftMixingClip(this, (DataLine.Info) info);
    }

    throw new IllegalArgumentException("Line unsupported: " + info);
}
ResampleExample.java 文件源码 项目:rcom 阅读 18 收藏 0 点赞 0 评论 0
public static void main(String[] args) throws Exception {
        AbstractRcomArgs a=new AbstractRcomArgs();
        UtilCli.parse(a, args, true);
        File folder=new File("/home/rizsi/tmp/video");
        byte[] data=UtilFile.loadFile(new File(folder, "remote.sw"));
        AudioFormat format=ManualTestEchoCancel.getFormat();
        final Mixer mixer = AudioSystem.getMixer(null);
        DataLine.Info info2= new DataLine.Info(SourceDataLine.class, format);
        SourceDataLine s=(SourceDataLine) mixer.getLine(info2);
        s.open(format, framesamples*2);
        s.start();
        try(LoopInputStream lis=new LoopInputStream(data))
        {
            try(SpeexResampler resampler=new SpeexResampler(a, framesamples, new ResampledReceiver(s)))
            {
                final byte[] buffer=new byte[framesamples*2];;
                while(true)
                {
                    UtilStream.readFully(buffer, lis, buffer.length);
                    feed(resampler, buffer);
                }
            }
//          byte[] buffer=new byte[framesamples*2];
//          while(true)
//          {
//              UtilStream.readFully(buffer, resampled, buffer.length);
//          }
        }
    }
JavaSoundAudioDevice.java 文件源码 项目:jlayer 阅读 26 收藏 0 点赞 0 评论 0
protected DataLine.Info getSourceLineInfo()
{
    AudioFormat fmt = getAudioFormat();
    //DataLine.Info info = new DataLine.Info(SourceDataLine.class, fmt, 4000);
    DataLine.Info info = new DataLine.Info(SourceDataLine.class, fmt);
    return info;
}
ClipOpenBug.java 文件源码 项目:openjdk-jdk10 阅读 22 收藏 0 点赞 0 评论 0
public static void main(String args[]) throws Exception {
    boolean res = true;
    try {
        AudioInputStream ais = new AudioInputStream(
                new ByteArrayInputStream(new byte[2000]),
                new AudioFormat(8000.0f, 8, 1, false, false), 2000); //
        AudioFormat format = ais.getFormat();
        DataLine.Info info = new DataLine.Info(Clip.class, format,
                                               ((int) ais.getFrameLength()
                                                        * format
                                                       .getFrameSize()));
        Clip clip = (Clip) AudioSystem.getLine(info);
        clip.open();
        FloatControl rateControl = (FloatControl) clip.getControl(
                FloatControl.Type.SAMPLE_RATE);
        int c = 0;
        while (c++ < 10) {
            clip.stop();
            clip.setFramePosition(0);
            clip.start();
            for (float frq = 22000; frq < 44100; frq = frq + 100) {
                try {
                    Thread.currentThread().sleep(20);
                } catch (Exception e) {
                    break;
                }
                rateControl.setValue(frq);
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        res = ex.getMessage().indexOf(
                "This method should not have been invoked!") < 0;
    }
    if (res) {
        System.out.println("Test passed");
    } else {
        System.out.println("Test failed");
        throw new Exception("Test failed");
    }
}


问题


面经


文章

微信
公众号

扫码关注公众号