사운드풀로 소리를 들어보세요.
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를 설정합니다.
설계 조정
기본 상태라도 정상적으로 작동할 수 있지만 외관은 아쉽고 조금이라도 나아질 수 있도록
위 그림처럼 버튼을 누르면 벨소리가 울리는 프로그램의 개조로 제작된다.
원래 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를 설정합니다.
설계 조정
기본 상태라도 정상적으로 작동할 수 있지만 외관은 아쉽고 조금이라도 나아질 수 있도록
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의 색상을 변경합니다.
색상 변화는 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>
Reference
이 문제에 관하여(사운드풀로 소리를 들어보세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rild/items/be825585738a6393edfe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)