delphi4arab منتديات دلفي للعرب

نسخة كاملة : هل بالامكان تقسيم ملف mp3 بدون فك الضغط
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
هل من الممكن تقسيم ملف mp3 كما هو اي بدون
فك الضغط
اضن انه من غير الممكن تقسيم الملف بدون فك ضغط
لذا يجب التحويل لملف wav
هذا حسب علمي
لكن هل من طريقة لتقسيم الwave بدون استخدام مكونات خارجية
انضر
كود :
[align=left]type TWaveHeader = record ident1: array[0..3] of Char; // Must be "RIFF" len: DWORD; // remaining length after this header ident2: array[0..3] of Char; // Must be "WAVE" ident3: array[0..3] of Char; // Must be "fmt " reserv: DWORD; // Reserved Size wFormatTag: Word; // format type nChannels: Word; // number of channels (i.e. mono, stereo, etc.) nSamplesPerSec: DWORD; //sample rate nAvgBytesPerSec: DWORD; //for buffer estimation nBlockAlign: Word; //block size of data wBitsPerSample: Word; //number of bits per sample of mono data cbSize: Word; //the count in bytes of the size of ident4: array[0..3] of Char; //Must be "data" end; You can load the file header with this function: function GetWaveHeader(FileName: TFilename): TWaveHeader; const riff = 'RIFF'; wave = 'WAVE'; var f: TFileStream; w: TWaveHeader; begin if not FileExists(Filename) then exit; try f := TFileStream.create(Filename, fmOpenRead); f.Read(w, Sizeof(w)); if w.ident1 <> riff then begin Showmessage('This is not a RIFF File'); exit; end; if w.ident2 <> wave then begin Showmessage('This is not a valid wave file'); exit; end; finally f.free; end; Result := w; end; Now we have all for creating the code for spliting the wave file: function SplitWave(Source, Dest1, Dest2: TFileName; Pos: Integer): Boolean; var f1, f2, f3: TfileStream; w: TWaveHeader; p: Integer; begin Result:=False if not FileExists(Source) then exit; try w := GetWaveHeader(Source); p := Pos - Sizeof(TWaveHeader); f1 := TFileStream.create(Source, fmOpenRead); f2 := TFileStream.create(Dest1, fmCreate); f3 := TFileStream.create(Dest2, fmCreate); {++++++++++Create file 1 ++++++++++++++++} w.len := p; f2.Write(w, Sizeof(w)); f1.position := Sizeof(w); f2.CopyFrom(f1, p); {++++++++++++++++++++++++++++++++++++++++} {+++++++++++Create file 2 +++++++++++++++} w.len := f1.size - Pos; f3.write(w, Sizeof(w)); f1.position := Pos; f3.CopyFrom(f1, f1.size - pos); {++++++++++++++++++++++++++++++++++++++++} finally f1.free; f2.free; f3.free; end; Result:=True; end;[/align]
الكود منقول من مدونة