사운드풀로 소리를 들어보세요.

17351 단어 Android

개시하다



나는 이런 느낌의 물건을 만들 줄 안다.
버튼을 누르면 소리가 나는 간단한 앱을 만드는 상태부터 참고하면서 만드는 형식으로 소개한다.
이 페이지의 독자들은 프로그래밍의 초급자를 구상하기 때문에 표현 방식이 약간 빙빙 돌았다.사전에 양해해 주십시오.
페이지에 오류 등이 있으면 평론에 지적해 주십시오.

원시 상태



위 그림처럼 버튼을 누르면 벨소리가 울리는 프로그램의 개조로 제작된다.
원래 MainActivity와 Clap의 코드는 다음과 같은 인상이다.
[MainActivity.java]
public class MainActivity extends AppCompatActivity {

    //"変数"を宣言している。値を入れる箱を作っているイメージ。何も指定しなければ、値は入っていない(=空箱)
    Button button;
    Clap clapInstance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //箱の中身を詰めている。
        button = (Button) findViewById(R.id.button);
        clapInstance = new Clap(getApplicationContext());

        //ボタンが押された時の処理を書いている。
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clapInstance.play();
            }
        });
    }
}
[Clap.java]
public class Clap {
    private SoundPool soundPool;
    private int soundId;

    public Clap(Context context) {
        soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
        soundId = soundPool.load(context, R.raw.sound_chime, 1);
    }

    public void play() {
        soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
    }
}

음원 준비.


Android 애플리케이션의 음원 파일을 준비하십시오.
이번에 우리는 여기.의 사이트에서ogg음원을 다운로드했다.

피아노 앱을 만들다


raw 파일에 음원 파일 넣기


다운로드한 파일을res/raw 파일의 위치에 넣습니다.

↓ 입장 후 raw의 모습이다.

레이아웃 파일 생성하기


새 파일


layout 폴더를 오른쪽 단추로 눌러서 새 레이아웃 파일을 만듭니다.이번 샘플은 액티비티입니다.저는 피아노라고 합니다.
↓ 를 마우스 오른쪽 버튼으로 클릭하여 새 파일을 생성합니다.

LinerLayout에서 RelativeLayout으로 바뀌다


레이아웃에 관하여...
Android Studio에서 프로젝트를 새로 만들 때 RelativeLayout, 기본적으로 파일을 새로 만들 때 LileearLayout이 추가됩니다.
익숙해지면 더 잘해!?그러니 Relative Layout으로 바꾸자.
↓ LiearLayout 섹션을 선택합니다.

↓ RelativeLayout의 Re를 입력하면 Android Studio가 추가되므로 엔터테인먼트 키를 누릅니다(가볍게!).

↓를 RelativeLayout으로 바꿀 수 있다.

Buton 구성


'드리미 파솔라도'라는 8개의 소리를 내야 하기 때문에 8개의 버튼을 구성해야 한다.자유롭게 안배할 수 있다.
↓ RelativeLayout에 8개의 Buton을 구성합니다.

↓ Button 8개를 배치하려고 한다.

Buton에서 문자 및 id 설정


"Buton의 Text를""kr"",""디지털""로 설정합니다."이런 문자를 설정하고 id를 분배하세요.

↓ 는 구성된 Buton에 id 및 text를 설정합니다.

설계 조정


기본 상태라도 정상적으로 작동할 수 있지만 외관은 아쉽고 조금이라도 나아질 수 있도록
  • Buton의 색상
  • Buton의 크기
  • Buton의 Text 색상
  • 배경색
  • 수정합니다.
    Buton의 색상을 변경합니다.
    색상 변화는 COLORS>이번에 사용한 색상 조합의 페이지에서 선택합니다.
    백그라운드에 색상을 설정하여 Buton의 색상을 변경할 수 있습니다.
    ↓ 앞 버튼 색상 변경

    (*text와 id를 할당하기 전의 그림을 표시함)
    ↓ 변경된 버튼 색상.

    ↓ 다른 부분도 다음과 같이 조정했다.

    설정한 값을 다음과 같이 요약한다.
    설정할 위치
    설정할 값
    background
    각각의 값
    textColor
    #d0f0f0
    textSize
    32sp
    width/height
    72dp

    Piano 클래스 생성


    샘플의 클랩은 제작과 똑같습니다.
    다만, 클랩은 한 소리, 피아노는 8가지 소리에 유의해야 한다.
    public class Piano {
        private SoundPool soundPool;
    
        private int soundIdDo;
        private int soundIdRe;
        private int soundIdMi;
        private int soundIdFa;
        private int soundIdSo;
        private int soundIdRa;
        private int soundIdSi;
        private int soundIdDo2;
    
        public Piano(Context context) {
            soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    
            //rawファイルから音楽データをとってくる
            soundIdDo = soundPool.load(context, R.raw.sound_do, 1);
            soundIdRe = soundPool.load(context, R.raw.sound_re, 1);
            soundIdMi = soundPool.load(context, R.raw.sound_mi, 1);
            soundIdFa = soundPool.load(context, R.raw.sound_fa, 1);
            soundIdSo = soundPool.load(context, R.raw.sound_so, 1);
            soundIdRa = soundPool.load(context, R.raw.sound_ra, 1);
            soundIdSi = soundPool.load(context, R.raw.sound_si, 1);
            soundIdDo2 = soundPool.load(context, R.raw.sound_do2, 1);
        }
    
        //音を鳴らすための"メソッド"を書いていく
        public void playDo() {
            soundPool.play(soundIdDo, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playRe() {
            soundPool.play(soundIdRe, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playMi() {
            soundPool.play(soundIdMi, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playFa() {
            soundPool.play(soundIdFa, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playSo() {
            soundPool.play(soundIdSo, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playRa() {
            soundPool.play(soundIdRa, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playSi() {
            soundPool.play(soundIdSi, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    
        public void playDo2() {
            soundPool.play(soundIdDo2, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    }
    

    MainActivity 변경


    준비된 레이아웃 파일과 Piano 클래스를 설치합니다.

    레이아웃 파일 적용





    Piano 클래스 설치


    사운드만 설치된 코드입니다.
    다른 소리도 마찬가지로 설치할 수 있다.
    ```
    public class MainActivity extends AppCompatActivity {
    //"変数"を宣言している。値を入れる箱を作っているイメージ。何も指定しなければ、値は入っていない(=空箱)
    Button button;
    Clap clapInstance;
    
    Button buttonDo;
    Piano pianoInstance;
    
    Button[] buttons = new Button[8];
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_piano);
    
    //
    //상자 안에 물건이 들어 있다.
    // button = (Button) findViewById(R.id.button);
    // clapInstance = new Clap(getApplicationContext());
    //
    ///버튼을 눌렀을 때의 처리.
    // button.setOnClickListener(new View.OnClickListener() {
    // @Override
    // public void onClick(View v) {
    // clapInstance.play();
    // }
    // });
        buttonDo = (Button) findViewById(R.id.button_do);
    
        pianoInstance = new Piano(getApplicationContext());
    
        buttonDo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pianoInstance.playDo();
            }
        });
    }
    
    }
    ```

    완성


    설치가 완료되면 응용 프로그램이 시작됩니다.

    짧은 부호

    public class MainActivity extends AppCompatActivity {
    
        //"変数"を宣言している。値を入れる箱を作っているイメージ。何も指定しなければ、値は入っていない(=空箱)
        Button button;
        Clap clapInstance;
    
        Button buttonDo;
        Piano pianoInstance;
    
        Button[] buttons = new Button[8];
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_piano);
    
            buttonDo = (Button) findViewById(R.id.button_do);
    
            pianoInstance = new Piano(getApplicationContext());
    
            buttonDo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    pianoInstance.playDo();
                }
            });
    
            getViews();
            setOnClicks();
        }
    
        private void getViews() {
            buttons[0] = (Button) findViewById(R.id.button_do);
            buttons[1] = (Button) findViewById(R.id.button_re);
            buttons[2] = (Button) findViewById(R.id.button_mi);
            buttons[3] = (Button) findViewById(R.id.button_fa);
            buttons[4] = (Button) findViewById(R.id.button_so);
            buttons[5] = (Button) findViewById(R.id.button_ra);
            buttons[6] = (Button) findViewById(R.id.button_si);
            buttons[7] = (Button) findViewById(R.id.button_do2);
        }
    
        private void setOnClicks() {
            for (int i = 0; i < 8; i++) {
                final int index = i;
                buttons[index].setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        pianoInstance.play(index);
                    }
                });
            }
        }
    }
    
    public class Piano {
        private SoundPool soundPool;
    
        private int soundIdDo;
        private int soundIdRe;
        private int soundIdMi;
        private int soundIdFa;
        private int soundIdSo;
        private int soundIdRa;
        private int soundIdSi;
        private int soundIdDo2;
    
        public Piano(Context context) {
            soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    
            //rawファイルから音楽データをとってくる
            soundIdDo = soundPool.load(context, R.raw.sound_do, 1);
            soundIdRe = soundPool.load(context, R.raw.sound_re, 1);
            soundIdMi = soundPool.load(context, R.raw.sound_mi, 1);
            soundIdFa = soundPool.load(context, R.raw.sound_fa, 1);
            soundIdSo = soundPool.load(context, R.raw.sound_so, 1);
            soundIdRa = soundPool.load(context, R.raw.sound_ra, 1);
            soundIdSi = soundPool.load(context, R.raw.sound_si, 1);
            soundIdDo2 = soundPool.load(context, R.raw.sound_do2, 1);
        }
    
        //音を鳴らすための"メソッド"
        public void play(int key) {
            switch (key) {
                case 0:
                    soundPool.play(soundIdDo, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 1:
                    soundPool.play(soundIdRe, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 2:
                    soundPool.play(soundIdRe, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 3:
                    soundPool.play(soundIdMi, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 4:
                    soundPool.play(soundIdSo, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 5:
                    soundPool.play(soundIdRa, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 6:
                    soundPool.play(soundIdSi, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
                case 7:
                    soundPool.play(soundIdDo2, 1.0f, 1.0f, 0, 0, 1.0f);
                    break;
    
            }
        }
    }
    

    배치 방안


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#d0f0f0"
        android:orientation="horizontal">
    
        <Button
            android:id="@+id/button_do"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#00468C"
            android:text="ド"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
    
        <Button
            android:id="@+id/button_re"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#1E91D6"
            android:text="レ"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
        <Button
            android:id="@+id/button_mi"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#1E91D6"
            android:text="ミ"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
    
        <Button
            android:id="@+id/button_fa"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#8FC93A"
            android:text="ファ"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
        <Button
            android:id="@+id/button_so"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#8FC93A"
            android:text="ソ"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
        <Button
            android:id="@+id/button_ra"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#E18335"
            android:text="ラ"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
        <Button
            android:id="@+id/button_si"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#E18335"
            android:text="シ"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
        <Button
            android:id="@+id/button_do2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:layout_weight="1"
            android:background="#E4CC37"
            android:text="ド"
            android:textColor="#f0f0f0"
            android:textSize="32sp" />
    
    
    </LinearLayout>
    

    좋은 웹페이지 즐겨찾기