[Android] Soundpool으로 만드는 드럼 앱

이번에는 안드로이드로 간단한 드럼을 만들어보도록 하겠습니다. 지금까지 SoundPool로 오카리나와 피아노를 만들어봤는데, Soundpool로 만드는 악기 앱 시리즈의 마지막 버전입니다.

 

SoundPool로 만드는 드럼 앱

드럼앱1

좌측 drawable에 드럼 이미지를 삽입합니다.

그다음 res 파일에 오른쪽 클릭하여 새로운 폴더 raw를 만들어줍니다.

 

드럼앱2

Directory를 클릭~!

 

드럼앱3

raw라고 폴더명을 입력해준 뒤 드럼 소리를 raw폴더 안에 넣어줍니다.

이까지 했으면 이제 소스코드를 입력해보겠습니다.

 

XML

<?xml version="1.0" encoding="utf-8"?>

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_Drum"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="5dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:layout_gravity="center"
    tools:context="com.example.user.music.DrumActivity">


    <Button
        android:id="@+id/d3"
        android:layout_height="wrap_content"
        android:background="@drawable/d3x"
        android:layout_width="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_x="389dp"
        android:layout_y="133dp" />


    <Button
        android:id="@+id/d4"
        android:layout_height="wrap_content"
        android:background="@drawable/d4x"
        android:layout_width="wrap_content"
        android:layout_alignBottom="@+id/d1"
        android:layout_toLeftOf="@+id/d5"
        android:layout_toStartOf="@+id/d5"
        android:layout_x="324dp"
        android:layout_y="173dp" />


    <Button
        android:id="@+id/d2"
        android:background="@drawable/d2x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:layout_below="@+id/d3"
        android:layout_alignRight="@+id/d1"
        android:layout_alignEnd="@+id/d1"
        android:layout_x="352dp"
        android:layout_y="84dp" />


    <Button
        android:id="@+id/d5"
        android:layout_height="wrap_content"
        android:background="@drawable/d5x"
        android:layout_width="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:layout_x="200dp"
        android:layout_y="20dp" />


    <Button
        android:id="@+id/d1"
        android:layout_height="130dp"
        android:background="@drawable/rrrr"
        android:layout_width="130dp"
        android:layout_marginRight="14dp"
        android:layout_marginEnd="14dp"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/d3"
        android:layout_toStartOf="@+id/d3"
        android:layout_marginTop="41dp"
        android:layout_x="315dp"
        android:layout_y="4dp" />


    <Button
        android:id="@+id/d7"
        android:background="@drawable/d7x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:layout_below="@+id/d3"
        android:layout_alignRight="@+id/d1"
        android:layout_alignEnd="@+id/d1"
        android:layout_x="96dp"
        android:layout_y="106dp" />


    <Button
        android:id="@+id/d6"
        android:background="@drawable/d6x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:layout_below="@+id/d3"
        android:layout_alignRight="@+id/d1"
        android:layout_alignEnd="@+id/d1"
        android:layout_x="202dp"
        android:layout_y="170dp" />


    <Button
        android:id="@+id/d8"
        android:background="@drawable/d8x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:layout_below="@+id/d3"
        android:layout_alignRight="@+id/d1"
        android:layout_alignEnd="@+id/d1"
        android:layout_x="112dp"
        android:layout_y="-2dp" />

    <Button
        android:id="@+id/d9"
        android:background="@drawable/d9x"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="19dp"
        android:layout_below="@+id/d9"
        android:layout_alignRight="@+id/d1"
        android:layout_alignEnd="@+id/d1"
        android:layout_x="196dp"
        android:layout_y="-10dp" />


    <ImageButton
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_x="3dp"
        android:layout_y="3dp"
        android:layout_marginTop="5dp"
        android:id="@+id/backdrum"
        android:background="@drawable/home"
        android:onClick="Clickdrumback" />

</AbsoluteLayout>

 

아래 사진과 같이 드럼을 배치하면 됩니다.

드럼앱4

 

java

package com.example.

user.music;

import android.content.Intent;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class DrumActivity extends AppCompatActivity {

    public static final int REQUEST_CODE_MainActivity = 1004;
    SoundPool pool;
    int d1,d2,d3,d4,d5,d6,d7,d8,d9;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
        setContentView(R.layout.activity_drum);

        pool = new SoundPool(9, AudioManager.STREAM_MUSIC, 0);
        d1 = pool.load(this, R.raw.drum2, 1);
        d2 = pool.load(this, R.raw.drum3, 1);
        d3 = pool.load(this, R.raw.drum1, 1);
        d4 = pool.load(this, R.raw.drum4, 1);
        d5 = pool.load(this, R.raw.drum8, 1);
        d6 = pool.load(this, R.raw.drum7, 1);
        d7 = pool.load(this, R.raw.drum5, 1);
        d8 = pool.load(this, R.raw.drum1, 1);
        d9 = pool.load(this, R.raw.drum6, 1);

        Button bt1 = (Button) findViewById(R.id.d1);
        Button bt2 = (Button) findViewById(R.id.d2);
        Button bt3 = (Button) findViewById(R.id.d3);
        Button bt4 = (Button) findViewById(R.id.d4);
        Button bt5 = (Button) findViewById(R.id.d5);
        Button bt6 = (Button) findViewById(R.id.d6);
        Button bt7 = (Button) findViewById(R.id.d7);
        Button bt8 = (Button) findViewById(R.id.d8);
        Button bt9 = (Button) findViewById(R.id.d9);

        bt1.setOnClickListener(mClickLisner);
        bt2.setOnClickListener(mClickLisner);
        bt3.setOnClickListener(mClickLisner);
        bt4.setOnClickListener(mClickLisner);
        bt5.setOnClickListener(mClickLisner);
        bt6.setOnClickListener(mClickLisner);
        bt7.setOnClickListener(mClickLisner);
        bt8.setOnClickListener(mClickLisner);
        bt9.setOnClickListener(mClickLisner);
    }
    public void Clickdrumback(View v){
        Intent resultIntent = new Intent();
        setResult(RESULT_OK, resultIntent);
        finish();
    }

    Button.OnClickListener mClickLisner = new Button.OnClickListener(){
        public void onClick(View v){

            switch(v.getId()) {
                case R.id.d1:
                pool.play(d1, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d2:
                pool.play(d2, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d3:
                pool.play(d3, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d4:
                    pool.play(d4, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d5:
                    pool.play(d5, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d6:
                    pool.play(d6, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d7:
                    pool.play(d7, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d8:
                    pool.play(d8, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
                case R.id.d9:
                    pool.play(d9, 1.0F, 1.0F, 0, 0, 1.0F);
                    break;
            }
        }
    };
}

이렇게 코드를 붙여 넣어주면 간단하게 드럼이 완성됩니다. 끝

 

댓글

Designed by JB FACTORY