dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 침입탐지
  • 코드리뷰
  • 머신러닝
  • 클라우드
  • CTF
  • java
  • 웹해킹
  • 포너블
  • 딥러닝
  • 데이터베이스
  • Guacamole
  • kotlin
  • db
  • 네트워크
  • 인공지능
  • 자료구조
  • cs
  • 자바
  • gcp
  • python #백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

Kotlin 실로폰 만들기
Android/Kotlin

Kotlin 실로폰 만들기

2021. 1. 25. 16:04
728x90

✔ 실로폰 기능

- 가로 화면으로 고정된 액티비티에 각 음계에 해당되는 음판을 배치한다.

- 음판을 누르면 해당 음이 재생된다.

 

✔ SoundPool 사용

 

✔ 소스코드

◾ activity_main.xml

- 8개의 음판 배치

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/do1"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:background="#FF0000"
        android:gravity="center"
        android:text="도"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/re"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/re"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="24dp"
        android:layout_marginBottom="24dp"
        android:background="@android:color/holo_orange_dark"
        android:gravity="center"
        android:text="레"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/mi"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/do1"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/mi"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="32dp"
        android:layout_marginBottom="32dp"
        android:background="@android:color/holo_orange_light"
        android:gravity="center"
        android:text="미"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/fa"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/re"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/fa"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="40dp"
        android:layout_marginBottom="40dp"
        android:background="@android:color/holo_green_light"
        android:gravity="center"
        android:text="파"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/sol"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/mi"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/sol"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="48dp"
        android:layout_marginBottom="48dp"
        android:background="@android:color/holo_blue_light"
        android:gravity="center"
        android:text="솔"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/la"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/fa"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/la"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="56dp"
        android:layout_marginBottom="56dp"
        android:background="@android:color/holo_blue_dark"
        android:gravity="center"
        android:text="라"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/si"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/sol"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/si"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="64dp"
        android:layout_marginBottom="64dp"
        android:background="@android:color/holo_purple"
        android:gravity="center"
        android:text="시"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/do2"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/la"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/do2"
        android:layout_width="50dp"
        android:layout_height="0dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="72dp"
        android:layout_marginEnd="30dp"
        android:layout_marginBottom="72dp"
        android:background="@android:color/holo_red_dark"
        android:gravity="center"
        android:text="도"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/si"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

◾ MainActivity.kt

- 가로 모드로 고정하기 위해서 아래 코드 사용

  requestedOrientation=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

- AndroidManifest.xml에서도 변경 가능하다.

  <activity android:name=".MainActivity android:screenOrientation="landscape">

- 실로폰 소리 다운로드 -> soundPool 사용

- 앱 종료 시, 반드시 release() 메소드 호출하여 soundPool 객체의 자원을 해제시켜주기!!

package com.example.xylophone

import android.content.pm.ActivityInfo
import android.media.SoundPool
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    private val soundPool=SoundPool.Builder().setMaxStreams(8).build()
    private val sounds= listOf(
        Pair(R.id.do1,R.raw.do1),
        Pair(R.id.re,R.raw.re),
        Pair(R.id.mi,R.raw.mi),
        Pair(R.id.fa,R.raw.fa),
        Pair(R.id.sol,R.raw.sol),
        Pair(R.id.la,R.raw.la),
        Pair(R.id.si,R.raw.si),
        Pair(R.id.do2,R.raw.do2)
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        //화면이 가로 모드로 고정되게 하기
        //requestedOrientation=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        sounds.forEach {turn(it)}
    }

    private fun turn(pair: Pair<Int, Int>){
        val soundId=soundPool.load(this, pair.second,1)
        findViewById<TextView>(pair.first).setOnClickListener {
            soundPool.play(soundId,1.0F,1.0f,0,0,1.0f)
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        soundPool.release()
    }
}

 

728x90

'Android > Kotlin' 카테고리의 다른 글

Kotlin Realm DB 사용시 발생한 오류 해결하기  (0) 2021.02.03
SQLite에서의 데이터 베이스 구축  (0) 2021.01.28
Kotlin 수평측정기 만들기  (0) 2021.01.22
Kotlin 나만의 웹브라우저 만들기  (0) 2021.01.22
Kotlin 타이머 만들기  (0) 2021.01.18
    'Android/Kotlin' 카테고리의 다른 글
    • Kotlin Realm DB 사용시 발생한 오류 해결하기
    • SQLite에서의 데이터 베이스 구축
    • Kotlin 수평측정기 만들기
    • Kotlin 나만의 웹브라우저 만들기
    dalgorithm
    dalgorithm

    티스토리툴바