2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > APE FLAC文件转WAV文件

APE FLAC文件转WAV文件

时间:2024-01-02 08:25:16

相关推荐

APE FLAC文件转WAV文件

近日需要实现APE(Monkey's Audio)转换WAV文件,都是目前比较流行音乐格式。如果对APE感兴趣可以下载Monkey's Audio 4.11 SDK (with source code). 回想起几年前使用一个开源小工具APE+CUE小刀,对于今天的APE依然可用。它是用一些bat脚本与HTAs实现的,最终于命令行调用MAC.EXE与LAME.EXE,完成APE与MP3转换。我们也可以学习一下。用编辑器打开APE+CUE.hta文件,可以看到以下代码:

<div id="she_ding" style="visibility:visible;position:absolute;left:0;top:0">

APE、CUE所在文件夹:<br/>

(一、选择该文件夹中任意一个文件)<br/>

(二、须保证APE、CUE文件名相同)<br/>

<input name="ape_cue" type="file"/><br/>

<br/>

分割后转换格式为:<br/>

<select name="ge_shi">

<option value="MP3-VBR" selected="1">MP3(浮动位速率)</option>

<option value="MP3-CBR320">MP3(固定位速率320kb/s)</option>

<option value="WMA-VBR">WMA(浮动位速率)</option>

<option value="WMA-LOSTLESS">WMA(无损压缩)</option>

<option value="APE">APE(无损压缩)</option>

<option value="WAV">WAV(无压缩)</option>

</select>

<br/><br/>

<table width="100%"><tr><td width="62%"></td><td>

<button onclick="kai_shi();">开始</button>

&nbsp;

<button onclick="shuo_ming();">说明</button>

</td></tr></table>

</div>

<!-- 进度 -->

<div id="jin_du" style="visibility:hidden;position:absolute;left:0;top:0">

<p id="zhuan_ji">专辑</p>

<hr/>

<ul id="dan_qu"><li>单曲</li></ul>

</div>

这的确是HTML标签,还有一些脚本,这里只是部分:

//---------------------------------------------------------------------------

//处理

//入口:APE、CUE文件名(不含后缀)

function chu_li(ming)

{

var ape = ming + ".ape";

var cue = ming + ".cue";

ri_zhi.WriteLine("****************************************");

ri_zhi.WriteLine(ape.slice(ape.lastIndexOf("\\") + 1) +

" + " +

cue.slice(cue.lastIndexOf("\\") + 1));

ri_zhi.WriteLine();

//分析CUE文件得碟资料

ri_zhi.WriteLine("分析CUE:");

var a = du_qie_cue(cue); //读入并切分

var die = fen_xi_cue(a); //分析

cue_ri_zhi(die); //分析结果写到日志

cue_jie_mian(die); //分析结果写到界面

ri_zhi.WriteLine("完成。"); ri_zhi.WriteLine();

//APE转WAV

ri_zhi.WriteLine("将APE解压成Windows WAVE:");

document.getElementById("gui0").style.color = "blue";

var wav = huan_hou_zhui(ape, ".wav");

a = '+ape+cue\\APE-WAVE "' + ape + '" "' + wav + '"';

ri_zhi.WriteLine(a);

xi_tong_ke.Run(a, 7, true);

if (! ci_pan.FileExists(wav))

throw Error("将APE解压成Windows WAVE时出错。");

document.getElementById("gui0").style.color = "black";

ri_zhi.WriteLine("完成。"); ri_zhi.WriteLine();

//逐轨处理

var wav00 = wav + "00.wav";

for (var i = 0 ; i < die.gui.length ; i++)

{

ri_zhi.WriteLine(shu_zi(die.gui[i].hao) + "." + die.gui[i].ming);

a = document.getElementById("gui" + die.gui[i].hao);

a.style.color = "blue";

a.scrollIntoView(false);

//按CUE分割

ri_zhi.WriteLine("割出该轨:");

a = '+ape+cue\\WAVE-N-1 "' + wav + '" ' +

die.gui[i].qi + ' ' +

die.gui[i].zhi + ' "' +

wav00 + '"';

ri_zhi.WriteLine(a);

xi_tong_ke.Run(a, 7, true);

a = ci_pan.GetFile(wav00);

if (a.Size == 0)

a.Delete();

if (ci_pan.FileExists(wav00))

ri_zhi.WriteLine("完成。");

else

{

ri_zhi.WriteLine("出错,跳过该轨。");

continue;

}

//转格式

ri_zhi.Write("转换格式到"); //该句后半部分由下列函数写

var zhuan_hou_ming; //转后名

switch (ge_shi.value)

{

case "MP3-VBR": zhuan_hou_ming = wav_mp3(wav00, die, die.gui[i], "VBR"); break;

case "MP3-CBR320": zhuan_hou_ming = wav_mp3(wav00, die, die.gui[i], "CBR320"); break;

case "WMA-VBR": zhuan_hou_ming = wav_wma(wav00, die, die.gui[i], "VBR"); break;

case "WMA-LOSTLESS": zhuan_hou_ming = wav_wma(wav00, die, die.gui[i], "LOSTLESS"); break;

case "APE": zhuan_hou_ming = wav_ape(wav00, die, die.gui[i]); break;

case "WAV": zhuan_hou_ming = wav_wav(wav00, die, die.gui[i]); break;

default: throw Error("未选定转换后格式。");

}

ci_pan.DeleteFile(wav00);

if (ci_pan.FileExists(zhuan_hou_ming))

ri_zhi.WriteLine("完成。");

else

{

ri_zhi.WriteLine("出错,跳过该轨。");

continue;

}

//移到专辑目录

ri_zhi.Write("将转换格式后之文件移至专辑目录");

var zhuan_ji_mu_lu = wav.slice(0, wav.lastIndexOf("\\") + 1) +

zheng_ming(die.zhuan_ji) + "\\";

ri_zhi.WriteLine(zhuan_ji_mu_lu + ":");

if (! ci_pan.FolderExists(zhuan_ji_mu_lu))

{

ri_zhi.WriteLine("专辑目录未存在,建立之。");

ci_pan.CreateFolder(zhuan_ji_mu_lu);

}

var gui_dang_ming = zhuan_ji_mu_lu + //归档名

zhuan_hou_ming.slice(zhuan_hou_ming.lastIndexOf("\\") + 1);

ri_zhi.WriteLine(gui_dang_ming);

if (ci_pan.FileExists(gui_dang_ming))

{

ri_zhi.WriteLine("专辑目录中已有同名文件,删去。");

ci_pan.DeleteFile(gui_dang_ming, true);

}

ci_pan.MoveFile(zhuan_hou_ming, gui_dang_ming);

ri_zhi.WriteLine("完成。");

document.getElementById("gui" + die.gui[i].hao).style.color = "black";

ri_zhi.WriteLine();

}

ci_pan.DeleteFile(wav);

}

例如WAV转换320k MP3的批处理是这样的:

REM Convert Windows WAVE to MP3 (CBR 320kb/s)

REM %1 Title

REM %2 Author

REM %3 Album

REM %4 Track number

REM %5 Windows WAVE file name

REM %6 MP3 file name

LAME.EXE --preset insane --tt %1 --ta %2 --tl %3 --tn %4 --add-id3v2 --space-id3v1 --pad-id3v2 %5 %6

APE转换WAV的批处理脚本:

REM Convert APE to Windows WAVE

REM Called by APE+CUE Knife, Chen Qingcan

REM %1 APE file name

REM %2 Windows WAVE file name

MAC %1 %2 –d

REM是BAT文件中的注释。如果您不了解BAT批使用文件可以看这里。

对于FLAC格式文件可以使用Frontah来转换。FLAC同样是一个开源无损音频编码,有兴趣可以查询它的源码。其中包含一个小工具Tag.exe,用于编辑IDE3v1,IDE3v2标记,从文件名生成Tag等功能,社区里有一些免费的前端UI。

对于带用CUE文件的APE或WAV,可以使用CUE Splitter,这是个免费软件,还有在线手册。你可以找到绿色版。在MP3,WAV,APE,FLAC,WMA这些文件之间转换,有条件可以考虑使用商业软WAV MP3 Converter。 我们的目标是转为WAV格式是为了使用Nero刻录为CD,在Nero中选择刻录音乐CD, 把转换好的WAV文件拖入刻录文件窗口,刻录即可。 这里只是抛砖引玉。

希望对您开发有帮助。有兴趣可以实现自己的前端程序。

作者:Petter Liu

出处:/wintersun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

该文章也同时发布在我的独立博客中-Petter Liu Blog。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。