java播放音频

一个是转码

这个是示例代码

/*
 * 251kb约242ms,即250Mb
 */
package main;
import it.sauronsoftware.jave.AudioAttributes;  

import it.sauronsoftware.jave.Encoder;  
import it.sauronsoftware.jave.EncodingAttributes;  
import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine.Info;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
 
import static javax.sound.sampled.AudioSystem.getAudioInputStream;
import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED;

public class MultiThread {
	public static void play(String filePath) {
        final File file = new File(filePath);
        try (final AudioInputStream in = getAudioInputStream(file)) {
             
            final AudioFormat outFormat = getOutFormat(in.getFormat());
            final Info info = new Info(SourceDataLine.class, outFormat);
 
            try (final SourceDataLine line =
                     (SourceDataLine) AudioSystem.getLine(info)) {
 
                if (line != null) {
                    line.open(outFormat);
                    line.start();
                    stream(getAudioInputStream(outFormat, in), line);
                    line.drain();
                    line.stop();
                }
            }
 
        } catch (UnsupportedAudioFileException 
               | LineUnavailableException 
               | IOException e) {
            throw new IllegalStateException(e);
        }
    }
 
    public static AudioFormat getOutFormat(AudioFormat inFormat) {
        final int ch = inFormat.getChannels();
        final float rate = inFormat.getSampleRate();
        return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
    }
 
    public static void stream(AudioInputStream in, SourceDataLine line) 
        throws IOException {
        final byte[] buffer = new byte[65536];
        for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
            line.write(buffer, 0, n);
        }
    }

	public static File execute(File source, String desFileName)  
			throws Exception {  
		File target = new File(desFileName);  
		long start = System.currentTimeMillis();
		AudioAttributes audio = new AudioAttributes();  
		audio.setCodec("libmp3lame");  
		audio.setBitRate(new Integer(36000)); //音频比率 MP3默认是1280000  
		audio.setChannels(new Integer(2));  
		audio.setSamplingRate(new Integer(44100));  
		EncodingAttributes attrs = new EncodingAttributes();  
		attrs.setFormat("mp3");  
		attrs.setAudioAttributes(audio);  
		Encoder encoder = new Encoder();  
		encoder.encode(source, target, attrs);  
		long end = System.currentTimeMillis();
		System.out.println("time:"+(end-start));
		return target;  
	}  

	public static void main(String[] args) throws Exception {  
		//File file = new File("C:\\Users\\niwx\\Desktop\\dictvoice.wav");  
		//execute(file,  "C:\\Users\\niwx\\Desktop\\11.mp3"); 
		play("C:\\Users\\niwx\\Desktop\\test.mp3");  
    }
	}


转载于:https://my.oschina.net/vintnee/blog/667647

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值