delphi4arab منتديات دلفي للعرب
هل بالامكان تقسيم ملف mp3 بدون فك الضغط - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : هل بالامكان تقسيم ملف mp3 بدون فك الضغط (/showthread.php?tid=7106)



هل بالامكان تقسيم ملف mp3 بدون فك الضغط - rabihpascal - 26-07-2015

السلام عليكم
هل من الممكن تقسيم ملف mp3 كما هو اي بدون
فك الضغط


هل بالامكان تقسيم ملف mp3 بدون فك الضغط - rahiche - 28-07-2015

اضن انه من غير الممكن تقسيم الملف بدون فك ضغط
لذا يجب التحويل لملف wav
هذا حسب علمي


هل بالامكان تقسيم ملف mp3 بدون فك الضغط - rabihpascal - 29-07-2015

لكن هل من طريقة لتقسيم الwave بدون استخدام مكونات خارجية


هل بالامكان تقسيم ملف mp3 بدون فك الضغط - rahiche - 30-07-2015

انضر
كود :
[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]
الكود منقول من مدونة