مشخصات پروژه
-
920
-
0.0
-
7561
-
0
-
1
برنامه چسباندن دو فایل صوتی به یکدیگر
برنامه چسباندن دو فایل صوتی به یکدیگر
برنامه چسباندن دو فایل صوتی به یکدیگر
با استفاده از این برنامه کاربردی دو فایل با فرمت Wav که از طرف کاربر انتخاب می شوند با هم ترکیب می شوند و تشکیل یک فایل جدید می دهند. روال این برنامه بدین صورت است که ابتدا در کلاس WaveIO و با استفاده از متد WavHeaderIN آدرس یک فایل به صورت رشته گرفته می شود. سپس این فایل در یک فایل استریم جدید به نام fs با قابلیت خواندن بارگذاری می شود. حال در این تابع اطلاعات فایل که در خود فایل جایگذاری شده اند خوانده می شود. برای مثال در فایل هایی با این فرمت Sampel rate که در حقیقت تعداد سمپل هایی از صدا است که فایل در یک ثانیه جابجا می کند، از بایت 24 تا 28 موجود است.
FileStream fs = new FileStream(spath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
length = (int)fs.Length - 8;
fs.Position = 22;
channels = br.ReadInt16();
fs.Position = 24;
samplerate = br.ReadInt32();
fs.Position = 34;
BitsPerSample = br.ReadInt16();
DataLength = (int)fs.Length - 44;
br.Close ();
fs.Close();
تابع دیگری که مشاهده می شود WaveHeaderOUT می باشد. این تابع آدرس فایل خروجی را گرفته و با استفاده از اطلاعاتی که در تابع قبلی بدست آمده بود، فایل خروجی را با لوازمی که یک فایل Wav باید داشته باشد پر می کند و فایل را در محل گرفته شده می سازد. حال باید تابعی داشته باشیم تا اطلاعات دو فایل ورودی را خوانده و با هم ترکیب کند و در فایل خروجی ثبت شده بنویسد.
حال به شرح تابع اصلی می پردازیم:
در این تابع ابتدا به ازای هرآدرس فایلی که در ورودی گرفته شده و در متغیر files ذخیره شده است تابع WavHeaderIN فراخوانی شده و اطلاعات مربوط به طول آن و طول داده های آن به فایل خروجی یعنی wa_out اضافه می شود.سپس بقیه اطلاعات اعم از SampleRate و غیره به فایل خروجی اضافه شده و این فایل در محل مورد نظر نوشته می شود.
در قسمت آخر برنامه به ازای تمامی آدرس های انتخاب شده، فایل ها در FileStream ای به نام fs بارگذاری می شوند و به fo که فایل خروجی است که با هدف اضافه کردن باز شده است، اضافه می شود.
foreach (string path in files)
{
FileStream fs = new FileStream(@path, FileMode.Open, FileAccess.Read);
byte[] arrfile = new byte[fs.Length - 44];
fs.Position = 44;
fs.Read(arrfile, 0, arrfile.Length);
fs.Close();
FileStream fo = new FileStream(@outfile, FileMode.Append, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fo);
bw.Write(arrfile);
bw.Close();
fo.Close();
}