好久没写BLOG了,送上一份原创的DELPHI版MP3切割,splitMp3为切割函数,支持按时间切割和按大小切割。望大家支持。
参考VC的资料编写的MP3切割DELPHI版单元.
unit UnitMp3DataUtil;
{
MP3 Cut Unit.
@author Jim Wu
2009-08
}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls;
type
Mp3SplitMode = (Mp3SplitByTime, Mp3SplitByDateLength);
TMp3DataInfo = packed record
isMp3: Boolean;
bitrate: Integer;
sampleRate: Integer;
isMono: Boolean;
isVBR: Boolean;
end;
function readMp3Head(fileName: string): TMp3DataInfo;
function splitMp3(mode: Mp3SplitMode; length: Integer; fr: TFileStream; writeFileName: string; var actualLength: Integer; var actualMillisecond: Integer): integer;
const
mpegBitrateTable: array[1..2,1..3,1..14] of Integer=(
(
( 32, 64, 96,128,160,192,224,256,288,320,352,384,416,448),
( 32, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,384),
( 32, 40, 48, 56, 64, 80, 96,112,128,160,192,224,256,320)
),
(
( 32, 48, 56, 64, 80, 96,112,128,144,160,176,192,224,256),
( 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160),
( 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160)
)
);
samplingRateTable: array[1..3,0..2] of Integer=(
(44100,48000,32000),
(22050,24000,16000),
(11025,12000,8000)
);
frameLengthTable: array[1..2,1..3] of Integer=(
(48000,144000,144000),
(24000, 72000, 72000)
);
samplesPerFrameTable: array[1..2,1..3] of Integer=(
( 384
使用delphi多年,前些天忽然遇到不会string转pbyte,很是失落,此时对于编程基本功的重要性深有体会.这其中用到MOVE函数.
搞了好一会才搞明白其用法.所以想贴出来帮助需要帮助的人.
var
s:string;
ps:Pchar;
b:pbyte;
len:integer;
begin
&nb ......