Как создать приложение для ксилофона на Android?
В этой статье мы будем создавать проект на ксилофоне с использованием Java и XML в Android. Изначально ксилофон был инструментом, на котором играли, ударяя по ряду деревянных брусков. В этом приложении будет реализован инструмент, похожий на ксилофон, способный воспроизводить звуки. В этом приложении мы создадим несколько кнопок, которые будут действовать как клавиши инструмента при ударе. Это будет приложение для одной активности. Пример видео приведен ниже, чтобы получить представление о том, что мы собираемся делать в этой статье.
Пошаговая реализация
Шаг 1: Создайте новый проект
Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Обратите внимание, что в качестве языка программирования выберите Java .
Шаг 2: Прежде чем перейти к разделу кодирования, вам нужно выполнить некоторые предварительные задания.
Добавить цвета: нам нужно добавить цвета в значение каталога ресурсов. Мы будем использовать эти цвета для наших кнопок.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < resources > < color name = "green1" >#0F9D58</ color > < color name = "green2" >#F21BB56A</ color > < color name = "green3" >#E620C374</ color > < color name = "green4" >#D929CF7E</ color > < color name = "green5" >#CC2ED885</ color > < color name = "green6" >#BF34E18D</ color > < color name = "green7" >#B33FF39B</ color > </ resources > |
Добавить ключевые заметки : сохраните эти аудиозаметки в каталоге app > res > raw .
Note: Reference article: Resource Raw Folder in Android Studio
- Примечание 1
- Заметка 2
- Заметка 3
- Примечание 4
- Примечание 5
- Примечание 6
- Примечание 7
Шаг 3: Работа с файлом activity_main.xml
Коды XML используются для построения структуры активности, а также ее стилевой части. В этом XML-файле мы создадим LinearLayout с вертикальной ориентацией. Он будет содержать семь кнопок , каждая из которых имеет разные функции onClick . Ширина кнопки уменьшается по мере того, как мы спускаемся вниз, чтобы придать ей вид ксилофона, а также символизировать, что чем меньше кнопка, тем меньше звук ноты. Ниже приведен код файла activity_main.xml .
XML
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:paddingBottom = "@dimen/activity_vertical_margin" android:paddingLeft = "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" android:orientation = "vertical" tools:context = ".MainActivity" > < Button style = "@style/KeyStyle" android:id = "@+id/c_key" android:background = "@color/green1" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "c" /> < Button style = "@style/KeyStyle" android:id = "@+id/d_key" android:background = "@color/green2" android:layout_marginLeft = "5dp" android:layout_marginRight = "5dp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "d" /> < Button style = "@style/KeyStyle" android:id = "@+id/e_key" android:background = "@color/green3" android:layout_marginLeft = "10dp" android:layout_marginRight = "10dp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "e" /> < Button style = "@style/KeyStyle" android:id = "@+id/f_key" android:background = "@color/green4" android:layout_marginLeft = "15dp" android:layout_marginRight = "15dp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "f" /> < Button style = "@style/KeyStyle" android:id = "@+id/g_key" android:background = "@color/green5" android:layout_marginLeft = "20dp" android:layout_marginRight = "20dp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "g" /> < Button style = "@style/KeyStyle" android:id = "@+id/a_key" android:background = "@color/green6" android:layout_marginLeft = "25dp" android:layout_marginRight = "25dp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "a" /> < Button style = "@style/KeyStyle" android:id = "@+id/b_key" android:background = "@color/green7" android:layout_marginLeft = "30dp" android:layout_marginRight = "30dp" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:onClick = "b" /> </ LinearLayout > |
Шаг 4: Работа с файлом MainActivity.java
В MainActivity нам нужно создать новый SoundPool . Soundpool использует службы библиотеки MediaPlayer для загрузки аудиофайлов. Мы создадим функцию для каждой ключевой кнопки с отдельной звуковой нотой. Ниже приведен код файла MainActivity.java . Комментарии добавляются внутри кода, чтобы понять код более подробно.
Java
import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.util.Log; import android.view.View; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { // Helpful Constants private final int sim_sound = 7 ; private final float lft_vol = 1 .0f; private final float rgt_vol = 1 .0f; private final int loop = 0 ; private final int prty = 0 ; private final float NORMAL_PLAY_RATE = 1 .0f; // Add member variables here private SoundPool mSoundPool; private int mCSoundId1; private int mDSoundId2; private int mESoundId3; private int mFSoundId4; private int mGSoundId5; private int mASoundId6; private int mBSoundId7; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Create a new SoundPool mSoundPool = new SoundPool(sim_sound, AudioManager.STREAM_MUSIC, 0 ); // Load and get the IDs to identify the sounds mCSoundId1 = mSoundPool.load(getApplicationContext(), R.raw.note1_c, 1 ); mDSoundId2 = mSoundPool.load(getApplicationContext(), R.raw.note2_d, 1 ); mESoundId3 = mSoundPool.load(getApplicationContext(), R.raw.note3_e, 1 ); mFSoundId4 = mSoundPool.load(getApplicationContext(), R.raw.note4_f, 1 ); mGSoundId5 = mSoundPool.load(getApplicationContext(), R.raw.note5_g, 1 ); mASoundId6 = mSoundPool.load(getApplicationContext(), R.raw.note6_a, 1 ); mBSoundId7 = mSoundPool.load(getApplicationContext(), R.raw.note7_b, 1 ); } // Add the play methods triggered by the buttons public void c (View v){ mSoundPool.play(mCSoundId1, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } public void d (View v){ mSoundPool.play(mDSoundId2, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } // Add the play methods triggered by the buttons public void e (View v){ mSoundPool.play(mESoundId3, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } public void f (View v){ mSoundPool.play(mFSoundId4, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } public void g (View v){ mSoundPool.play(mGSoundId5, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } public void a (View v){ mSoundPool.play(mASoundId6, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } public void b (View v){ mSoundPool.play(mBSoundId7, lft_vol, rgt_vol, prty,loop,NORMAL_PLAY_RATE); } } |