-
Здравствуйте уважаемые мастера. Недавно столкнулся с такой проблемой. Решил разрезать мп3 файл пользуясь
библиотекой Bass.dll при этом изспользуя функцию BASS_ChannelGetPosition( Hendl ); - где-то слышал что она получает
позицию проигрывания. Когда же разрезаю, то трек получается во первых длиннее, а во вторых функция вырезает не в
указанном месте. Что я не так делаю? Помогите, может кто сталкивался с подобной проблемой. Вот мой код:
var BegSplit, EndSplit : int64;
* * *
// Начальная позиция BegSplit:=BASS_ChannelGetPosition( Hendl );
// Конечная позиция EndSplit:=BASS_ChannelGetPosition( Hendl );
* * *
Procedure Split(FileSource, FileSplit : String; BegPos, EndPos : int64); var LoadF, SaveF : File; Buf : array[0..1024] of byte; NumRead, NumWritten : integer; Begin Assign(LoadF, FileSource); Reset(LoadF, 1); form1.Label9.Caption:=inttostr( FileSize(LoadF) );
Assign(SaveF, FileSplit); Rewrite(SaveF, 1);
Seek(LoadF, BegPos);
While not Eof(LoadF) do Begin BlockRead(LoadF, Buf, SizeOf(Buf), NumRead ); BlockWrite(SaveF, Buf, SizeOf(Buf), NumWritten);
if FilePos(LoadF)>=EndPos then break; If NumRead<>NumWritten then break; End;
Close(LoadF); Close(SaveF); End;
procedure TForm1.Button9Click(Sender: TObject); begin Split(PChar(OpenDialog1.FileName),'c:\split.mp3', BegSplit, EndSplit); end;
|