برنامه نویسی 663 بازدید

فریمورک مالتی‌مدیا در اندروید از ضبط و پخش صدا نیز پشتیبانی می‌کند. در این مطلب مراحل ساخت یک اپلیکیشن ضبط صدا را بررسی می‌کنیم که قابلیت ضبط کردن صدا و ذخیره‌سازی آن در حافظه داخلی دستگاه اندرویدی را دارد. این کار با استفاده از MediaRecorder که از سوی SDK اندروید ارائه شده است صورت می‌گیرد. همچنین با روش تقاضای آنی «دسترسی‌های کاربر» (User Permissions) و شیوه کار با حافظه داخلی یک دستگاه اندرویدی آشنا خواهیم شد.

ایجاد رابط کاربری (UI)

ابتدا باید رابط کاربری اپلیکیشن ضبط صدای خودمان را بسازیم. این رابط از یک طرح‌بندی ساده با 3 دکمه تشکیل یافته است که برای آغاز، مکث/ ازسرگیری و توقف ضبط صدا استفاده می‌شوند.

تقاضای مجوزهای مورد نیاز

پس از ایجاد رابط کاربری می‌توانیم با استفاده از MediaRecorder شروع به ساخت اپلیکیشن خود بکنیم. اما قبل از آن باید مجوز دسترسی‌های مورد نیاز خود برای ضبط صدا و استفاده از حافظه داخلی را از کاربر بخواهیم. این کار با چند خط کد ساده در فایل AndroidManifest.xml ممکن است:

همچنین پیش از استفاده عملی از MediaRecorder لازم است که بررسی کنیم آیا کاربر واقعاً مجوز دسترسی‌ها را ارائه کرده است یا نه؛ این کار را در فایل MainActivity.kt انجام می‌دهیم:

نکته: این خطوط کد در ادامه به فراخوانی OnClickListener در دکمه start_recording انتقال خواهند یافت تا بتوانیم مطمئن باشیم که MediaRecorder بدون در اختیار داشتن دسترسی‌های لازم شروع به کار نمی‌کند.

اپلیکیشن ضبط صدا

ضبط و ذخیره‌سازی صدا

پس از تهیه مقدمات کار اینک نوبت آن رسیده است که به صورت عملی اقدام به ضبط و ذخیره‌سازی صدا بکنیم.

افزودن OnClickListeners

ابتدا باید یک OnClickListeners به دکمه‌های خود اضافه کنیم تا مطمئن شویم که به رویدادهای اجرا شده از سوی کاربر پاسخ می‌دهند. همان طور که پیش‌تر گفتیم وجود مجوز دسترسی‌های صحیح را پیش از افزودن فراخوانی OnClickListener به دکمه start_recording بررسی می‌کنیم.

پیکربندی MediaRecorder

سپس باید یک مسیر برای خروجی تعریف کرده و شروع به پیکربندی MediaRecorder خودمان کنیم.

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

ضبط و ذخیره‌سازی صوت

کد مورد استفاده برای آغاز به کار MediaRecorder در رویداد OnClickListener برای دکمه start_recording قرار می‌گیرد:

همان طور که مشاهده می‌کنید ما باید تابع prepare را پیش از آن که اقدام به ضبط صدا بکنیم، فراخوانی کرده باشیم. همچنین آن را درون بلوک try-catch جاسازی کرده‌ایم تا مطمئن شویم که اپلیکیشن هنگامی که تابع prepares ناموفق باشد، از کار نمی‌افتد.

متد OnClickListeners دکمه Stop کاملاً شبیه به آن متدی است که در بخش قبل تعریف کردیم.

در کد فوق بررسی می‌کنیم که آیا MediaRecorder در حال حاضر و پیش از توقف عملی recording در حال اجرا است یا نه، چون اپلیکیشن در زمانی که متد stop هنگام عدم ضبط صدا فراخوانی شود، ممکن است موجب از کار افتادن برنامه شود. پس از آن متغیر state را به حالت false تغییر می‌دهیم تا مانع این بشویم که کاربر مجدداً روی دکمه stop بزند.

سپس باید OnClickListener را برای دکمه pause/resume تعریف کنیم.

ما در این دو متد بررسی می‌کنیم که آیا MediaRecorder در حال اجرا است یا نه. اگر چنین باشد فرایند ضبط صدا را متوقف می‌کنیم و متن دکمه را به resume تغییر می‌دهیم. اگر دکمه دوباره کلیک شود فرایند ضبط صدا را از نقطه‌ای که باقی مانده بود از سر می‌گیریم.

در نهایت ما می‌توانیم ضبط صدا را آغاز کرده و با باز کردن فایل recording.mp3 که در حافظه داخلی دستگاه ذخیره شده است به آن گوش دهیم.

کد کامل اپلیکیشن ضبط صدا در کاتلین: MainActivity.kt

در ادامه کد منبع کامل اپلیکیشن ابتدایی ضبط صدا را مشاهده می‌کنید:

بررسی فایل صدا

پس از ضبط کردن صدا باید به حافظه داخلی دستگاه اندرویدی خود بروید تا بتوانید به فایل ضبط شده گوش بدهید. اگر در مورد مسیر این کار مطمئن نیستید، مراحل کار را در ادامه توضیح داده‌ایم:

  1. اپلیکیشن file را روی دستگاه اندرویدی خود باز کنید.
  2. به بخش local بروید.
  3. به دنبال فایلی با نام recording.mp3 بگردید.

اپلیکیشن ضبط صدا

سخن پایانی

بدین ترتیب به پایان این راهنما با موضوع اپلیکیشن مقدماتی ضبط صدا در کاتلین رسیدیم. اینک شما با طرز کار MediaRecorder آشنا شده‌اید و می‌دانید که چگونه می‌توانید به صورت همزمان تقاضای دسترسی بکنید و چرا این کار مهم است. همچنین نکاتی را در مورد حافظه داخلی دستگاه اندرویدی و شیوه ذخیره‌سازی داده‌ها در آن آموختید. نسخه پیشرفته‌تری از این اپلیکیشن که مجهز به امکانات بیشتری مانند پخش صدای ضبط شده با استفاده از MediaPlayer است را می‌توانید در این ریپوی گیت‌هاب (+) مشاهده کنید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

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

بر اساس رای 2 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *