docomo SH703i で再生できる AAC

概要

  • SH703i で再生できる AAC は、特にエンコードのパラメータにこだわなくても作れそう


再生できるビットレート、サンプルレートの確認

16?320kbps の範囲のビットレートと、8,000?48,000Hz の範囲のサンプルレートで AAC を作って、SH703i で再生できるか実験してみた。

実験の結果、全180通りの全てのファイルが再生できた。ただし、高ビットレートになると、まれに音飛びが起きた。

極端な値にしなければ、特に再生できないということになならないようだ。

ただし、ビットレートは56?256kbps、サンプルレートは8,000?22,050kHzの範囲から外れると、ファイルサイズがほとんど変化していないので、指定しても意味がないようだ。ソースファイルによるものか、FAAC の仕様よるものなのかわからないけど。

100321_AAC

実験に使った AAC は次のスクリプトで作った。

var CWD = WScript.ScriptFullName.substr(0, WScript.ScriptFullName.lastIndexOf("\\")+1);
var INFILE = CWD + "072_C4KM56_S.wav";

var bitrates = [ null, 16, 20, 24, 32, 40, 48, 56, 64, 80, 96, 128, 160, 192, 224, 256, 288, 320 ];
var freqs = [ null, 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 ];
var n = 1;

// Logfile
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var ts = fso.CreateTextFile(WScript.ScriptFullName + ".log", true);

var bitrate, freq, outfile, options, time, filesize, status;

for(var i=0;i<bitrates.length;i++) {
	bitrate = bitrates[i];
	
	for(var j=0;j<freqs.length;j++) {
		
		freq = freqs[j];
		outfile = "MMF" + ("000" + n).slice(-4) + ".mp4";
		options = { bitrate: bitrate, freq: freq };
		var tmp = new Date().getTime();
		
		status = faac(INFILE, outfile, options);
		time = new Date().getTime() - tmp;
		
		// check if AAC file created
		try {
			filesize = fso.GetFile(outfile).Size;
		} catch(ex) {
			filesize = undefined;
		}
		
		// append record to Logfile
		ts.WriteLine([outfile, filesize, time, status, options.bitrate, options.freq].join("\t"));
		
		n++;
	}
}

ts.Close();
WScript.Echo("all processed");

function faac(infile, outfile, options) {
	var oExec;
	var faac = "faac";
	faac += options.quality ? " -q " + options.quality : "";
	faac += options.bitrate ? " -b " + options.bitrate : "";
	faac += options.freq    ? " -c " + options.freq    : "";
	faac += " -w";				// Wrap AAC data in MP4
	faac += outfile ? " -o " + outfile : "";
	faac += " " + INFILE;
	
	oExec = WScript.CreateObject("WScript.Shell").Exec(faac);
	
	while(oExec.Status == 0) {
		WScript.Sleep(100);
	}
	
	return oExec.Status;
}

参考文献

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>