Как создать приложение для ксилофона на Android?

Опубликовано: 2 Сентября, 2022

В этой статье мы будем создавать проект на ксилофоне с использованием 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
    xmlns:tools="http://schemas.android.com/tools"
    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);
    }
  
}

Выход: