آموزش کاتلین : ساخت اپلیکیشن ضبط صدا

بهمن 7, 1398| علی شیرالی
آموزش کاتلین - نحوه ساخت اپلیکیشن اندروید ضبط صدا | وبلاگ مارکت اندروید ریور

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

اپلیکیشن ضبط صدا ساخته شده با کاتلین قرار است چه کند ؟

قرار است صدا ضبط کند ! البته می خواهم چگونگی این پروسه را توضیح دهم ، این اپلیکیشن با استفاده از MediaRecorder که در SDK ارائه شده امکان ضبط صدا و ذخیره آن روی حافظه داخلی یا جانبی رو با user-permissions مربوطه فراهم میکند.

آموزش ساخت اپلیکیشن ضبط صدا با کاتلین

درخواست مجوزهای لازم از کاربر

خب ابتدا باید مجوزهای لازم که همان user-permissions را از کاربر دریافت کنیم ، خوشبختانه در اندروید بدون اجازه نمی توان کاری انجام داد ، ما به دو مجوز ضبط صدا و نوشتن روی حافظه خارجی نیاز داریم که به این ترتیب می توانید در فایل AndroidManifest.xml خود اضافه کنید.

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

ساخت رابط کاربری اپلیکیشن در کاتلین

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent" android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:id="@+id/textview_sound_recorder_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sound Recorder By Androidriver.ir"
            android:layout_centerHorizontal="true"
            android:textSize="32dp"
            android:textStyle="bold"
            android:textColor="#000"
            android:layout_marginTop="32dp"
    />

    <Button
            android:id="@+id/button_start_recording"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Start"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="32dp"
            android:layout_marginBottom="32dp"
            android:layout_centerVertical="true"/>

    <Button
            android:id="@+id/button_pause_recording"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Pause"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="32dp"/>

    <Button
            android:id="@+id/button_stop_recording"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Stop"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="32dp"
            android:layout_marginRight="32dp"/>
</RelativeLayout>

شروع عملیات ضبط و ذخیره صدای ضبط شده در کاتلین

فایل اصلی کلاس اپلیکیشن خود که Main Activity با پسوند kt. است رو باز کنید باید در مرحله اول مطمئن شویم آیا کاربر مجوزهای لازم را به اپلیکیشن داده است یا خیر برای همین در کلاس اصلی اپلیکیشن این کد ها را اضافه می کنیم :

همچنین بخوانید :  بهترین روش کسب درآمد از اپلیکشن اندروید

اضافه کردن OnClickListeners برای تعریف واکنش دکمه ها به تاچ کاربر

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

در این بخش عملیات شروع ضبط صدا ، توقف کامل و وقفه تعرف شده است.

button_start_recording.setOnClickListener {
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED &amp;&amp; ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        val permissions = arrayOf(android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE)
        ActivityCompat.requestPermissions(this, permissions,0)
    } else {
        startRecording()
    }
}

button_stop_recording.setOnClickListener{
    stopRecording()
}

button_pause_recording.setOnClickListener {
    pauseRecording()
}

تنظیم مسیر ذخیره فایل ضبط شده

حالا شما نیاز دارید فایلی که ضبط کردید را در حافظه نصب شده ( داخلی یا خارجی ) ذخیره کنید بعد از آدرس دهی به فایل ضبط شده فرایند Encode , تبدیل فرمت و خروجی به فایل انجام می شود ، کافی است کد زیر را به اکتیویتی اصلی خود اضافه کنید :

private var output: String? = null
private var mediaRecorder: MediaRecorder? = null
private var state: Boolean = false
private var recordingStopped: Boolean = false
// تعاریف را باید به ابتدای فایل اکتیویتی خود اضافه کنید.

// این کد هارا نیز به بدنه فایل اکتیویتی خود اضافه کنید.
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    output = Environment.getExternalStorageDirectory().absolutePath + "/recording.mp3"
    mediaRecorder = MediaRecorder()
    
    mediaRecorder?.setAudioSource(MediaRecorder.AudioSource.MIC)
    mediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
    mediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
    mediaRecorder?.setOutputFile(output)
}

شروع ضبط و ذخیره فایل

حالا لازم است ضبط فایل خود را آغاز کنیم ، این کد در OnClickListeners دکمه شروع ضبط قرار میگیرد درواقع همان دکمه start_recording تا در زمانی که روی این دکمه تاچ شد بداند چه اتفاقی قرار است بیافتد :

private fun startRecording() {
    try {
        mediaRecorder?.prepare()
        mediaRecorder?.start()
        state = true
        Toast.makeText(this, "Recording started!", Toast.LENGTH_SHORT).show()
    } catch (e: IllegalStateException) {
        e.printStackTrace()
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

برای دکمه توقف ضبط ( پایان ضبط ) کافی است کد زیر را اضافه کنید ، این کد فایل را بعد از انجام ضبط روی حافظه ذخیره می نماید.

private fun stopRecording(){
    if(state){
        mediaRecorder?.stop()
        mediaRecorder?.release()
        state = false
    }else{
        Toast.makeText(this, "You are not recording right now!", Toast.LENGTH_SHORT).show()
    }
}

در کد بالا در صورت درحال ضبط بودن برنامه ، با تاچ دکمه توقف ، ضبط به پایان رسیده و فایل ما ذخیره میشه در غیر این صورت پیغام شما درحال حاضر چیزی ضبط نمی کنید را نمایش می دهد. در اصل این شرط برای این است که اپلیکیشن ما Crash نکند ! چون اصولا کرش کردن اتفاق خیلی زشتیه ! و معنی جز “کار ناشیانه” برنامه نویس نمیده.

همچنین بخوانید :  تاثیر اپلیکیشن در افزایش فروش فروشگاه اینترنتی

این کد نیز برای دکمه وقفه و ادامه قرار داده می شود ، تا زمانی که اپلیکیشن در حالت وقفه است دکمه را به ادامه تغییر دهد و قاعدتا زمانی که در حالت ضبط است دکمه را به وقفه تغییر دهد :

@SuppressLint("RestrictedApi", "SetTextI18n")
@TargetApi(Build.VERSION_CODES.N)
private fun pauseRecording() {
    if(state) {
        if(!recordingStopped){
            Toast.makeText(this,"Stopped!", Toast.LENGTH_SHORT).show()
            mediaRecorder?.pause()
            recordingStopped = true
            button_pause_recording.text = "Resume"
        }else{
            resumeRecording()
        }
    }
}

@SuppressLint("RestrictedApi", "SetTextI18n")
@TargetApi(Build.VERSION_CODES.N)
private fun resumeRecording() {
    Toast.makeText(this,"Resume!", Toast.LENGTH_SHORT).show()
    mediaRecorder?.resume()
    button_pause_recording.text = "Pause"
    recordingStopped = false
}

این کد در لیستنر مربوط به دکمه وقفه و ادامه قرار می گیرد تا بتواند فانکنش مربوطه را به اپلیکیشن شما اضافه کند.

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

علی شیرالی نویسنده مقاله

بنیانگذار مارکت اندروید ریور ، توسعه دهنده وب و موبایل ، گاهی هم گیم باز 🎮 و صد البته یه عاشق فیلمسازی 🎬 و عکاسی 📷 که چندین گام جدی هم توی این زمینه برداشته..



می تونی علی شیرالی رو توی شبکه های اجتماعی هم دنبال کنی ...

مقالات مرتبط را بخوانید :


سورس های اندروید شامل تخفیف رو ببین !

به این مقاله امتیاز دهید :
5/5 (1 Review)
راستی اگه توسعه دهنده اندروید هستی ، میتونی سورس ها خودت رو در مارکت اندروید ریور بفروشی و کسب درآمد فوق العاده ای داشته باشی برای شروع اینجا کلیک کن و برای اطلاع از تخفیف ها و محصولات ویژه در تلگرام اندروید ریور رو دنبال کن عضویت در کانال
  خرید سورس های حرفه ای بازی و اپلیکیشن اندروید

  پیوستن به کانال تلگرام اندروید ریور

دسته‌ها: عمومی