`
jiuyuehe
  • 浏览: 184185 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 调用lame.exe 将 wav 进行MP3压缩的一些问题

阅读更多
首先下载附件 lame.exe copy到d 盘,因为代码默认是去d盘找,当然可以修改

注意singleShell 里面的2个线程 ,如果注释调就能发现,程序运行阻塞了。这2个线程在于情况当前现成的IO操作,使得线程变成正常状态。


package xm.createpkg;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class AudioImpress {
	/**
	 * 转化单个文件
	 * @param path
	 * @return
	 */
	public static String singleShell(String path) {
		String newName = path.replace(".wav", ".mp3");
		String command = "d:\\lame -V2  " + path + " " + newName;
		try {
			String cmd = createBat(command);
			Process process = Runtime.getRuntime().exec(cmd);
			
		            final InputStream is1 = process.getInputStream();  
		            final InputStream is2 = process.getErrorStream();  
		            new Thread() {  
		                public void run() {  
		                    BufferedReader br = new BufferedReader(  
		                            new InputStreamReader(is1));  
		                    try {  
		                        String lineB = null;  
		  
		                        while ((lineB = br.readLine()) != null) {  
		                            if (lineB != null) System.out.println(lineB);  
		  
		                        }  
		                    } catch (IOException e) {  
		                        e.printStackTrace();  
		                    }  
		                }  
		            }.start();  
		  
		            new Thread() {  
		                public void run() {  
		                    BufferedReader br2 = new BufferedReader(  
		                            new InputStreamReader(is2));  
		                    try {  
		  
		                        String lineC = null;  
		                        while ((lineC = br2.readLine()) != null) {  
		  
		                            if (lineC != null) System.out.println(lineC);  
		                        }  
		                    } catch (IOException e) {  
		                        e.printStackTrace();  
		                    }  
		                }  
		            }.start();  
		            process.waitFor();  
			
			
		} catch (Throwable e) {
			e.printStackTrace();
		}
		return newName;
	}
	/**
	 * 转化一个文件下所以文件,包括n层文件夹
	 * @param strList
	 */
	private static void callShell(List<String> strList) {
		try {
			for (int i = 0; i < strList.size(); i++) {
				String newName = strList.get(i).replace(".wav", ".mp3");
				String command = "d:\\lame -V2  " + strList.get(i) + " "
						+ newName;
				String cmd = createBat(command);
				Process process = Runtime.getRuntime().exec(cmd);
			}

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

	private static String createBat(String command) throws IOException {
		String dir = "d:\\lame.bat";

		byte[] b = command.getBytes();
		File file = new File(dir);
		if (!file.exists()) {
			file.createNewFile();
		}
		FileOutputStream os = new FileOutputStream(file);
		os.write(b);
		os.close();

		return dir;

	}

	private static List<String> getFileName(String path, List<String> strList) {
		File file = new File(path);
		FileFilter ff = new FileFilter() {
			@Override
			public boolean accept(File dir) {
				if (dir.getName().endsWith(".wav")) {
					return true;
				}
				return false;
			}
		};
		if (file.isFile()) {
			System.out.println("必须是文件夹");
		} else {
			File[] fileList = file.listFiles(ff);
			for (File f : fileList) {
				if (f.isFile()) {
					strList.add(f.getAbsolutePath());
				} else {
					getFileName(f.getAbsolutePath(), strList);
				}
			}
		}
		return strList;
	}

	public static void main(String[] args) throws IOException {

		String path = "G:\\本人文档存放\\研发中心任务文档\\自动分析html\\colorblock-音效文件\\audio\\20114822174851.wav";
		// change(path);
		//AudioImpress ai  = new AudioImpress();
		singleShell(path);
		//CreatePkg pkg = new CreatePkg();
		//pkg.audioImpress(path);
	}

	private static void change(String path) {
		List<String> strList = new ArrayList<String>();
		getFileName(path, strList);
		callShell(strList);
	}
}


分享到:
评论
1 楼 自然而永然 2014-07-31  
我运行,结果失败
Warning: unsupported audio format
什么问题

相关推荐

    使用LAME实现wav转mp3

    标题中的“使用LAME实现wav转mp3”指的是利用LAME库将Wave(.wav)音频格式转换为MP3(.mp3)音频格式。在数字音频领域,这两种格式非常常见,但MP3因其高效的有损压缩算法,能显著减小文件体积,更适合网络传输和...

    java实现wav文件转成mp3文件

    在Java环境中,我们可以借助JAVE(Java Audio Video Encoder)或者JLayer这样的库来调用LAME进行编码。 JAVE是一个Java封装的多媒体转换库,它提供了与各种编码器(包括LAME)交互的接口。使用JAVE,我们可以编写...

    lame 自动调用lame对音频进行各种格式的变换

    描述中提到,要在程序中自动调用`lame`,你需要确保`lame.exe`可执行文件位于你的工程目录下。这是因为在运行时,程序需要能够找到这个文件来执行音频转换。如果你的程序是用C#、Python、Java或任何其他编程语言编写...

    jandroid中实现将wav格式转化成MP3

    本文将深入探讨如何在JAndroid环境中利用jin技术将WAV格式的音频文件转换为MP3格式。WAV是一种无损音频格式,它保留了原始录音的所有细节,但文件大小通常较大,不适合在移动设备上存储和传输。相反,MP3是一种有损...

    语音 pcm 转换 成 MP3 格式

    本主题主要涉及的是将原始的PCM(脉冲编码调制)音频数据转换为更通用且压缩过的MP3格式。以下是对这个过程的详细说明: 1. **PCM音频格式**: PCM是一种无损的数字音频编码方式,它直接将模拟信号转换成二进制...

    java1.0.2音频格式转换

    Java 1.0.2 音频格式转换是一款基于Java平台的工具,它允许用户将不同的音频文件格式进行互换,特别提及的是可以将.wav格式的音频文件转换为.mp3格式。这种转换对于多媒体处理、音乐库管理和网络传输等方面非常有用...

    VC++实现MP3格式录音

    2. 编码过程:使用LAME的API,如`lame_encode_buffer_interleaved`,将RAW或WAV格式的音频数据编码为MP3流。 3. 写入文件:将编码后的MP3数据写入文件,可以使用标准C++库中的fstream类完成这一操作。 **WAR转MP3*...

    converttomp3.zip

    此类可能会调用诸如LAME这样的第三方库来完成实际的编码工作,因为Java标准库本身并不支持MP3编码。 `pom.xml`文件是Maven项目的配置文件,它定义了项目的依赖、构建指令和其他元数据。在这个案例中,`pom.xml`可能...

    AndroidMp3Recorder.zip

    3. **MP3编码**:MP3是一种有损音频压缩格式,能够将音频文件大幅度压缩,同时保持相对较高的音质。在Android上实现MP3录音,需要使用到MP3编码库。常见的开源MP3编码库有LAME,它可能被用于本项目中。 4. **...

    可连续播放的MP3播放器

    解码MP3文件通常需要使用特定的音频库,如FFmpeg或LAME,它们提供了API供开发者调用,将压缩的MP3数据转化为模拟信号,再由计算机的声卡输出。 2. **编程语言**:开发MP3播放器可以选择多种编程语言,常见的有C++、...

    andless源码

    - **MP3**:这是一种广泛使用的有损压缩格式,解码涉及复杂的DCT(离散余弦变换)和IDCT(逆离散余弦变换)算法。andless可能使用了诸如libmp3lame这样的开源库来完成MP3解码。 - **M4A**:这是基于AAC编码的一种...

Global site tag (gtag.js) - Google Analytics