7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Mobile Development

Membuat teka-teki untuk Android dengan Dolby Audio API

Read Time: 27 mins
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

Indonesian (Bahasa Indonesia) translation by Sandi Muamar (you can also view the original English article)

Dalam tutorial ini, saya akan menunjukkan kepada Anda bagaimana menggunakan Dolby Audio API untuk meningkatkan suara dalam aplikasi Android Anda. Menunjukkan kepada Anda bagaimana menggunakan Dolby Audio API, kita akan menciptakan sebuah sederhana namun menyenangkan permainan puzzle.

Pengenalan

Di hari ini pasar ponsel ramai, sangat penting untuk membuat aplikasi Anda menarik sebagai mereka dapat mungkin. Meningkatkan pengalaman audial aplikasi bisa sebagai menarik bagi pengguna memiliki antarmuka pengguna yang menakjubkan.

Dengan suara yang diciptakan oleh sebuah aplikasi adalah bentuk interaksi antara pengguna dan aplikasi yang terlalu sering diabaikan. Namun, ini berarti bahwa menawarkan pengalaman audial yang besar dapat membantu aplikasi Anda berdiri keluar dari kerumunan.

Dolby Digital Plus adalah codec audio lanjutan yang dapat digunakan dalam aplikasi mobile menggunakan Dolby's mudah-ke-menggunakan Audio API. Dolby telah membuat API tersedia untuk beberapa platform, termasuk Android dan Kindle Fire. Dalam tutorial ini, kita akan melihat pelaksanaan Android API.

API Audio Dolby untuk Android kompatibel dengan perangkat lebar kisaran dari Android. Ini berarti bahwa Anda Android aplikasi dan permainan dapat menikmati audio tinggi kesetiaan, mendalam dengan hanya beberapa menit karya mengintegrasikan API Audio Dolby's. Mari kita menjelajahi apa yang dibutuhkan untuk mengintegrasikan API dengan menciptakan sebuah permainan puzzle.

1. Tinjauan

Pada bagian pertama dari tutorial ini, saya akan menunjukkan kepada Anda bagaimana untuk membuat menyenangkan permainan puzzle. Karena fokus dari tutorial ini adalah mengintegrasikan Dolby Audio API, aku tidak akan pergi ke terlalu banyak detail dan saya berharap Anda sudah akrab dengan dasar-dasar Android pengembangan. Dalam bagian kedua dari artikel ini, kita akan zoom in pada integrasi API Audio Dolby dalam aplikasi Android.

Kita akan membuat teka-teki tradisional game untuk Android. Tujuan dari permainan adalah untuk slide potongan puzzle ke dalam slot kosong dari Dewan teka-teki untuk bergerak potongan-potongan teka-teki. Pemain harus mengulangi proses ini sampai setiap bagian dari teka-teki dalam urutan yang benar. Seperti yang Anda lihat dalam gambar di bawah ini, saya telah menambahkan beberapa ke setiap potongan teka-teki. Ini akan membuatnya lebih mudah untuk melacak potongan-potongan teka-teki dan urutan mereka berada di.

Untuk membuat permainan lebih menarik, aku akan menunjukkan Anda bagaimana menggunakan gambar kustom serta cara untuk mengambil foto untuk membuat teka-teki unik Anda sendiri. Kita juga akan menambahkan sebuah tombol shuffle untuk mengatur ulang potongan-potongan teka-teki untuk memulai permainan baru.

2. persiapan

Langkah 1

Hal ini tidak penting IDE apa yang Anda gunakan, tetapi untuk tutorial ini saya akan menggunakan JetBrains IntelliJ Idea. Buka IDE Anda pilihan dan membuat proyek baru untuk aplikasi Android Anda. Pastikan untuk membuat aktivitas kelas utama dan tata letak XML.

Langkah 2

Mari kita pertama kali mengkonfigurasi file manifest aplikasi. Node aplikasi dari berkas manifes, set hardwareAccelerated menjadi true. Ini akan meningkatkan kinerja render aplikasi Anda bahkan untuk 2D permainan seperti yang kita akan membuat.

Pada langkah berikutnya, kita menetapkan ukuran layar yang akan mendukung aplikasi kita. Untuk permainan, saya biasanya berfokus pada perangkat dengan layar lebih besar, tetapi pilihan ini adalah sepenuhnya terserah Anda.

Dalam simpul aktivitas berkas manifes, tambahkan sebuah node yang bernama configChanges dan set nilainya ke orientasi seperti ditunjukkan di bawah. Anda dapat menemukan informasi lebih lanjut tentang pengaturan ini pada situs pengembang.

Sebelum kita melanjutkan, tambahkan dua node menggunakan-izin untuk mengaktifkan getaran dan akses tulis untuk permainan kami. Masukkan potongan berikut sebelum aplikasi node di berkas manifes.

Step 3

Mari kita juga menambahkan sumber daya yang kita akan menggunakan kemudian dalam tutorial ini. Mulailah dengan menambahkan gambar yang ingin Anda gunakan untuk teka-teki. Tambahkan ke folder drawable proyek Anda. Aku telah memilih untuk menambahkan gambar ke folder drawable-hdpi proyek saya.

Terakhir tetapi tidak paling, tambahkan file suara yang Anda ingin menggunakan dalam permainan Anda. Dalam proyek Anda res folder, membuat sebuah direktori baru yang dinamakan mentah dan menambahkan suara file ke folder ini. For the purpose of this tutorial, I've added two audio files. The first sound is played when the player moves a puzzle piece while the second sound is played when the game is finished, that is, when the player completes the puzzle. Suara kedua tersedia di SoundBible. Bunyi pertama ini berlisensi di bawah lisensi Creative Commons Attribution 3.0 dan direkam oleh Mike Koenig.

3. menciptakan otak permainan

Seperti yang saya sebutkan sebelumnya, saya tidak akan menjelaskan proses pembuatan permainan secara rinci karena fokus dari tutorial ini adalah mengintegrasikan Dolby Audio API. Pada langkah berikutnya, saya akan memandu Anda melalui langkah-langkah yang perlu Anda ambil untuk membuat game teka-teki.

Kita mulai dengan menciptakan kelas baru, SlidePuzzle, yang akan menjadi otak permainan. Setiap langkah yang dilakukan di teka-teki diproses dan dilacak oleh instance kelas ini menggunakan matematika sederhana.

Itu adalah bagian penting dari permainan seperti ini akan menentukan ubin yang dapat dipindahkan dan arah mana. Kelas juga akan memberitahu kami ketika teka-teki selesai.

Kita akan mulai dengan menyatakan sejumlah variabel yang kita perlukan sedikit kemudian. Lihatlah snipet kode berikutnya di mana saya menyatakan variabel untuk empat arah yang mungkin potongan-potongan teka-teki yang dapat bergerak di, array dua bilangan bulat untuk arah horisontal dan vertikal dan array untuk ubin teka-teki. Kami juga menyatakan dan membuat sebuah instance kelas acak, yang akan kita gunakan nanti dalam tutorial ini.

Langkah berikutnya adalah untuk menciptakan metode init untuk kelas SlidePuzzle. Init metode menerima dua argumen yang menentukan lebar dan tinggi SlidePuzzle objek. Menggunakan variabel instan lebar dan tinggi, kami instantiate array ubin dan menetapkan handleLocation seperti yang ditunjukkan di bawah ini.

The SlidePuzzle class also needs a setter and getter method for the tiles property. Their implementations aren't that complicated as you can see below.

Selain accesor untuk properti ubin, saya juga telah membuat beberapa metode kenyamanan yang akan datang berguna kemudian dalam tutorial ini. Metode getColumnAt dan getRowAt, misalnya, kembali kolom dan baris dari lokasi tertentu dalam teka-teki.

Metode jarak, metode penolong lain yang kita akan menggunakan dalam beberapa saat, menghitung jarak antara ubin menggunakan matematika sederhana dan array ubin.

Metode berikutnya adalah getPossibleMoves, yang kita akan gunakan untuk menentukan kemungkinan posisi teka-teki potongan dapat memindahkan ke. Screenshot berikut, ada empat potongan-potongan teka-teki yang dapat dipindahkan ke slot kosong dari Dewan teka-teki. Potongan-potongan yang pemain dapat memindahkan adalah 5, 2, 8 dan 4. Tidak saya memberitahu Anda nomor akan datang berguna?


Pelaksanaan getPossibleMoves mungkin tampak menakutkan pada awalnya, tetapi tidak lebih dari matematika dasar.

Dalam metode pickRandomMove, kami menggunakan objek acak yang kita buat sebelumnya. Seperti namanya menunjukkan, metode pickRandomMove bergerak sepotong acak teka-teki. Objek acak digunakan untuk menghasilkan bilangan acak, yang dikembalikan dengan metode pickRandomMove. Metode ini juga menerima satu argumen, integer, yang merupakan lokasi kita mengabaikan, yaitu slot kosong dari Dewan teka-teki.

InvertMove metode, yang digunakan sedikit kemudian dalam metode mengocok, membalik integer digunakan untuk arah pilihan.

MoveTile metode menerima dua bilangan bulat, yang digunakan untuk menghitung gerakan yang diperlukan menggunakan matematika dasar. Metode tersebut mengembalikan true atau false.

Metode mengocok digunakan untuk menyeret potongan-potongan teka-teki permainan baru mulai. Luangkan waktu untuk memeriksa implementasinya sebagai itu adalah bagian penting dari permainan. Di shuffle, kita menentukan batas didasarkan pada tinggi dan lebar teka-teki. Seperti yang Anda lihat, kita menggunakan metode jarak untuk menentukan jumlah ubin yang perlu dipindahkan.

Ada dua metode penolong lain kita perlu untuk mengimplementasikan, getDirection dan getHandleLocation. Metode getDirection mengembalikan arah yang potongan puzzle di lokasi akan dipindahkan dan getHandleLocation kembali slot kosong dari Dewan teka-teki.

4. membuat Dewan teka-teki

Membuat sebuah class baru dan menyebutnya SlidePuzzleView. Kelas ini adalah pandangan dari Dewan teka-teki, memperluas kelas lihat dan akan mengambil seluruh layar perangkat. Kelas bertanggung jawab untuk menggambar potongan-potongan teka-teki serta menangani peristiwa sentuhan.

Selain sebuah konteks objek, konstruktor SlidePuzzleView juga menerima instance kelas SlidePuzzle seperti yang Anda lihat di bawah ini.

Kita override metode onSizeChanged kelas dan dalam metode ini kami menetapkan puzzleWidth dan puzzleHeight ke 0.

Metode refreshDimensions yang dipanggil ketika mengubah dimensi pemandangan dan teka-teki yang perlu dibangun kembali. Metode ini dipanggil dalam kelas onDraw metode.

Dalam metode onDraw kelas SlidePuzzleView, sebenarnya gambar teka-teki berlangsung, termasuk menggambar garis Dewan teka-teki, tapi kami juga menetapkan dimensi dari potongan-potongan teka-teki untuk memastikan bahwa mereka rapi sesuai dengan layar perangkat. Lihat contoh SlidePuzzle membantu kita meletakkan tampilan seperti yang Anda lihat dalam pelaksanaan onDraw di bawah ini.

Untuk menangani peristiwa-peristiwa sentuhan, kita perlu meng-override metode onTouchEvent kelas. To keep onTouchEvent concise and readable, I've also declared a few helper methods, finishDrag, doMove, startDrag, and updateDrag. These methods help implementing the dragging behavior.

I've also declared getter methods for targetWidth and targetHeight and accessors for bitmap.

5. membuat aktivitas kelas

Dengan implementasi kelas SlidePuzzle dan SlidePuzzleView yang selesai, saatnya untuk fokus pada kegiatan utama kelas yang IDE Anda diciptakan untuk Anda. Kelas kegiatan utama dalam contoh ini dinamai SlidePuzzleMain, tapi Anda dapat diberi nama berbeda. Kelas SlidePuzzleMain akan membawa bersama segala sesuatu yang kita buat sejauh ini.

Dalam kegiatan tersebut onCreate metode, kami instantiate objek bitmapOptions, menetapkan atribut inScaled nya ke false. Kami juga membuat instance kelas SlidePuzzle dan instance kelas SlidePuzzleView, lewat kegiatan sebagai Lihat konteks. Kami kemudian menetapkan pemandangan aktivitas oleh menerapkan setContentView dan lewat di objek pemandangan.

Di loadBitmap, kami memuat gambar yang ditambahkan ke proyek pada awal tutorial ini dan yang kita akan gunakan untuk teka-teki. Metode menerima lokasi gambar sebagai argumen hanya, yang digunakan untuk mengambil gambar.

Dalam loadBitmap, kita juga memanggil setBitmap. Pelaksanaan setBitmap ditunjukkan di bawah.

Untuk membuat permainan puzzle yang lebih menarik untuk pemain, kami akan menambahkan pilihan untuk menyesuaikan permainan dengan membiarkan pemain untuk Pilih gambar untuk teka-teki dari pengguna galeri foto atau mengambil satu dengan perangkat kamera. Kami juga akan membuat pilihan menu untuk setiap metode.

Untuk melakukan semua pekerjaan ini, kami menerapkan dua metode yang baru, selectImage dan takePicture, di mana kita membuat niat untuk mengambil gambar yang kita butuhkan. Metode onActivityResult menangani hasil seleksi pengguna. Lihatlah snipet kode di bawah ini untuk memahami gambaran lengkap.

Semua yang tersisa untuk kita lakukan adalah membuat pilihan menu untuk setiap metode. Di bawah implementasi menggambarkan bagaimana Anda dapat membuat sebuah menu dengan pilihan, yang ditampilkan kepada pengguna ketika mereka tekan tombol pilihan perangkat.

Menu pilihan harus melihat serupa dengan yang ditunjukkan di bawah ini.

By tapping Select image or Take photo, you should be able to select an image from your device's photo gallery or take one with the camera, and use it in the puzzle game.

Anda mungkin telah memperhatikan bahwa saya juga telah menambahkan pilihan menu ketiga untuk mengocok potongan-potongan teka-teki papan. Opsi menu ini memanggil metode mengocok yang kami dilaksanakan di kelas SlidePuzzle sedikit lebih awal di tutorial ini.

Sebelum kita menerapkan Dolby Audio API, mari kita membuat dua metode yang akan memicu pemutaran file audio yang kami menambahkan sebelumnya. Anda dapat meninggalkan implementasi metode ini kosong untuk saat ini. Metode onFinish yang dipanggil ketika permainan selesai sementara playSound dipanggil setiap kali potongan puzzle akan dipindahkan.

Semua yang tersisa untuk kita lakukan adalah memanggil loadBitmap dari kegiatan onCreate metode dan menyebarkannya lokasi gambar yang ingin Anda gunakan untuk teka-teki.

Lihat gambar di bawah ini untuk contoh apa permainan Anda akan terlihat seperti, tergantung pada gambar yang Anda telah digunakan untuk teka-teki.

6. menerapkan Dolby Audio API

Langkah 1

Seperti yang saya sebutkan di awal tutorial ini, mengintegrasikan Dolby Audio API sangat mudah dan hanya membutuhkan waktu beberapa menit. Mari kita lihat bagaimana kita dapat memanfaatkan Dolby Audio API dalam permainan kami.

Mulai dengan men-download Audio Dolby API dari Dolby's pengembang situs. Untuk melakukannya, buat akun gratis pengembang atau sign in jika Anda sudah memilikinya. Setelah Anda men-download API, menambahkan perpustakaan untuk proyek Anda.

Step 2

Sebelum Anda mengintegrasikan Dolby Audio API, adalah ide yang baik untuk menambahkan volume kontrol untuk aplikasi Anda. Ini mudah dilakukan dan memakan waktu hanya satu baris kode. Menambahkan cuplikan kode berikut ke aktivitas Anda onCreate metode

Langkah 3

The next step is to declare two variables in your Activity class, an instance of the MediaPlayer class and an instance of the DolbyAudioProcessing class. Don't forget to add the required imports at the top.

Langkah 4

We'll now make the Activity class adopt the OnDolbyAudioProcessingEventListener and MediaPlayer.OnCompletionListener interfaces.

To adopt these interfaces, we need to implement a few methods as shown in the code snippet below.

Kami mengaktifkan objek DolbyAudioProcessing ketika onDolbyAudioProcessingClientConnected dipanggil dan menonaktifkannya lagi ketika onDolbyAudioProcessingClientDisconnected disebut.

Seperti yang Anda lihat dalam potongan kode sebelumnya, kami melepaskan objek MediaPlayer ketika telah selesai bermain audio file.

Untuk memutar suara ketika pemain bergerak potongan puzzle, kita perlu untuk mengimplementasikan metode playSound. Sebelum kita fokus pada playSound, pertama kita membuat instance dari SlidePuzzleMain dalam kelas SlidePuzzleView dan pandangan yang playSlide metode, yang kita sebut playSound pada contoh SlidePuzzleMain.

Dalam metode playSound, kita membuat sebuah instance kelas MediaPlayer dan menggunakan Dolby Audio API untuk memulai pengolahan audio. Jika Dolby Audio API tidak didukung oleh perangkat pengguna, metode getDolbyAudioProcessing yang akan kembali null.

As you can see below, the implementation of the onFinish method is very similar to that of playSound. The main difference is that we show a message to the user if the Dolby Audio API isn't available. As you may remember, the onFinish method is played when the game is finished and the player has completed the puzzle.

We also call shuffle at the end of onFinish to start a new game when the player has finished the puzzle.

Step 5

It's important that we release the DolbyAudioProcessing and MediaPlayer objects when they are no longer needed. Releasing these objects ensures we don't compromise the device's battery life and negatively impact the device's performance.

We start by declaring three methods. The first method, releaseDolbyAudioProcessing, releases the DolbyAudioProcessing object and sets it mDolbyAudioProcessing to null. The second method, restartSession, restarts the session managed by the DolbyAudioProcessing object and in the third method, suspendSession, the audio session is suspended and the current configuration is saved for later use.

As you can see in the above code snippet, I've also created a handful of methods to handle any exceptions that may be thrown in releaseDolbyAudioProcessing, restartSession, and suspendSession.

The three methods we just created need to be invoked at several key moments of the application's lifecycle. We accomplish this by overriding the onStop, onStart, onDestroy, onResume, and onPause methods in our SlidePuzzleMain class.

Di onStop, kami memberitahukan MediaPlayer objek untuk menjeda dan di onStart objek MediaPlayer terus pemutaran jika bukan nol. Metode onDestroy disebut ketika aplikasi ditutup. Dalam metode ini, kita melepaskan objek MediaPlayer, mengatur mPlayer ke null, dan memanggil releaseDolbyAudioProcessing, yang kami menerapkan sebelumnya.

Finally, in onPause and onResume we suspend and restart the audio session by invoking suspendSession and restartSession respectively.

If you've followed the steps outlined in this tutorial, then your game should now be fully functional with the Dolby Audio API integrated. Build the project to play with the final result.

7. kesimpulan

Saya yakin Anda akan setuju bahwa mengintegrasikan Dolby Audio API mudah dan tidak mengambil lebih dari lima menit. Mari kita secara singkat meringkas langkah-langkah kita sudah diambil untuk mengintegrasikan API.

  1. Impor Perpustakaan Audio Dolby API
  2. membuat sebuah instance kelas DolbyAudioProcessing
  3. mengimplementasikan antarmuka OnDolbyAudioProcessingEventListener.
  4. mengaktifkan contoh DolbyAudioProcessing di onDolbyAudioProcessingClientConnected
  5. menonaktifkan contoh DolbyAudioProcessing di onDolbyAudioProcessingClientDisconnected
  6. setelah memulai media player, menginisialisasi instance DolbyAudioProcessing yang menggunakan profil permainan
  7. Periksa apakah objek DolbyAudioProcessing null untuk memverifikasi jika Dolby Audio API didukung oleh perangkat ini
  8. to conserve battery life and optimize performance, suspend and release the DolbyAudioProcessing instance when the application is destroyed or moved to the background

Kesimpulan

Even though the game we created is fairly simple, it is important to remember the focus of this tutorial, the Dolby Audio API. The mobile market is a crowded place and standing out from other games isn't easy. Adding superior sound to your game won't go unnoticed by your users and it will get your game noticed. Head over to Dolby's developer website to give it a try.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.