کاوش در موتور VoIP Mediastreamer2. قسمت 3

مطالب مقاله از من گرفته شده است کانال ذن.

کاوش در موتور VoIP Mediastreamer2. قسمت 3

بهبود مثال مولد آهنگ

در قبلی مقاله ما یک برنامه تولید صدا نوشتیم و از آن برای استخراج صدا از بلندگوی کامپیوتر استفاده کردیم. اکنون متوجه خواهیم شد که برنامه ما پس از اتمام، حافظه را به پشته بر نمی گرداند. وقت آن است که این موضوع را روشن کنیم.

پس از اینکه دیگر به مدار نیاز نداریم، آزادسازی حافظه باید با توقف خط لوله داده آغاز شود. برای انجام این کار، باید منبع ساعت و تیک تیک را با استفاده از تابع از مدار جدا کنید ms_ticker_detach(). در مورد ما، باید تیکر را از ورودی فیلتر جدا کنیم منبع خالی:

ms_ticker_detach(ticker, voidsource)

ضمناً پس از توقف نوار نقاله، می توانیم مدار آن را تغییر داده و دوباره به کار بیاندازیم و دوباره تیکر را وصل کنیم.

اکنون می توانیم با استفاده از تابع آن را حذف کنیم ms_ticker_destroy():

ms_ticker_destroy(ticker)

نوار نقاله متوقف شده است و ما می توانیم قطعاتی از آن را جدا کنیم و فیلترها را جدا کنیم. برای این کار از تابع استفاده کنید ms_filter_unlink():

ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

هدف از آرگومان ها مانند تابع است ms_filter_link().

فیلترهای جدا شده را با استفاده از آن حذف می کنیم ms_filter_destroy():

ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);

با اضافه کردن این خطوط به مثال خود، یک پایان برنامه صحیح از نظر مدیریت حافظه بدست می آوریم.

همانطور که می بینیم، تکمیل صحیح برنامه ما را ملزم می کرد که تقریباً همان تعداد خطوط کد اولیه را با میانگین چهار خط کد در هر فیلتر اضافه کنیم. به نظر می رسد که اندازه کد برنامه متناسب با تعداد فیلترهای مورد استفاده در پروژه افزایش می یابد. اگر در مورد هزار فیلتر در مدار صحبت کنیم، چهار هزار خط عملیات معمول برای ایجاد و از بین بردن آنها به کد شما اضافه می شود.

اکنون می دانید که چگونه برنامه ای را که از پخش کننده رسانه استفاده می کند، به درستی خاتمه دهید. در مثال های زیر، به خاطر فشردگی، این کار را «فراموش می کنم». اما شما فراموش نمی کنید؟

توسعه دهندگان پخش کننده رسانه ابزار نرم افزاری برای تسهیل دستکاری فیلترها هنگام مونتاژ/جداسازی مدارها ارائه نکرده اند. با این وجود، یک کمکی وجود دارد که به شما امکان می دهد به سرعت یک فیلتر را از مدار وارد یا خارج کنید.

ما بعداً به حل این مسئله باز خواهیم گشت، زمانی که تعداد فیلترها در نمونه های ما از دوجین بیشتر شود.

بعد مقاله ما یک مدار سطح سیگنال را جمع می کنیم و یاد می گیریم که چگونه نتیجه اندازه گیری را از فیلتر بخوانیم. بیایید دقت اندازه گیری را ارزیابی کنیم.

منبع: www.habr.com

اضافه کردن نظر