Android - Sound ( 소리 출력 )

Android 2011.09.13 17:19

오늘은 간단한 음악 출력 기능정도만 알아보겠습니다.
여러가지 포맷을 재생할 수 있지만 mp3나 wav정도가 좋겠죠??
재생하고자 하는 파일은 res/raw에 첨부해야하지만 처음 프로젝트를 생성하면
raw파일이 없으므로 따로 직접 폴더를 생성해주신다음에 파일을 넣어주시면 되겠습니다.

소리를 출력할 클래스로는 SoundPool 를 사용합니다

SoundPool (int maxStreams, int streamType, int srcQuality)

이 클래스에 필요한 인수 3가지
첫번째는 동시에 재생 가능한 최대 스트림 개수를 지정하는 것
두번째는 오디오스트림의 타입으로 거의 STREAM_MUSIC을 사용
세번째는 샘플링 품질을 지정하는데 현재는 아무런 효과가 없으므로 0을 주어 디폴트 품질을 사용

각 인수에 맞는 값을 주어서 객체를 생성 후 다음 메서드로 사운드를 불러옵니다.

int load (Context context, int resld, int priority)
int load (String path, int priority)

priority는 재생의 우선순위로 현재 효과가 없으므로 1값을 주어 사용합니다.
사운드를 로드한 후에는 재생할 때에는 다음 메서를 호출하여 사용합니다.

int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

이 메서드에 필요한 인수 6가지
첫번째는 재생할 사운드를 지정하는데 load 메서드가 리턴한 식별자
두번째와 세번째는 좌우볼륨을 각각 지정할 수 있는데 0이 가장 작은 소리고 1이 가장 큰소리
네번째는 재생 우선순위인데 위에서 말햇듯이 1값을 주어 사용
다섯번째는 반복 모드이며 이 인수가 지정하는 값에 +1회 반복이며 -1값이되면 무한 반복
여섯번째는 재생속도이며 1이 정상속도이고 그 값에 -나 +만큼 배속이 늘어남


이제 소리를 출력해보는 실습을 해보겠습니다.

프로젝트는 다음과 같이 생성하겠습니다.

Project name : ExamSound
Build Target : Android 2.1
Package name : jsh.exam.sound
Create Activity : mainpage
Min SDK Version : 7


출력할 음향 파일입니다.

[##_1C|cfile6.uf@18171D334E6F11821BFF82.mp3|filename="ddok.mp3" filemime="application/octet-stream"|_##]

프로젝트 생성 후 res폴더에 raw폴더 생성 후 꼭 넣어주세요.


자바 소스

mainpage.java

package jsh.exam.sound;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class mainpage extends Activity implements OnClickListener {
 /** Called when the activity is first created. */

 SoundPool pool;
 int ddok;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  //객체를 생성
  pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
  
  //ddok에 사운드를 로드함
  ddok = pool.load(this, R.raw.ddok, 1);

  //xml에 생성한 버튼 값들을 불러옴
  Button bt1 = (Button) findViewById(R.id.button1);
  Button bt2 = (Button) findViewById(R.id.button2);
  Button bt3 = (Button) findViewById(R.id.button3);
  Button bt4 = (Button) findViewById(R.id.button4);

  //버튼에 텍스트 지정
  bt1.setText("보통 재생");
  bt2.setText("볼륨 절반 재생");
  bt3.setText("2배속 재생");
  bt4.setText("1/2배속 재생");

  //버튼에 클릭이벤트 지정
  bt1.setOnClickListener(this);
  bt2.setOnClickListener(this);
  bt3.setOnClickListener(this);
  bt4.setOnClickListener(this);

 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub

  
  //클릭했을 때 불러온 버튼ID값에 play메서드 인수값에 따라 소리 출력
  
  switch (v.getId()) {

  case R.id.button1:      
   pool.play(ddok, 1, 1, 0, 0, 1);

   break;

  case R.id.button2:
   pool.play(ddok, 0.5f, 0.5f, 0, 0, 1);

   break;

  case R.id.button3:
   pool.play(ddok, 1, 1, 0, 0, 2);

   break;

  case R.id.button4:
   pool.play(ddok, 1, 1, 0, 0, 0.5f);

   break;

  }
 }
}


XML 소스

main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="
http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button
  android:layout_height="wrap_content"
  android:id="@+id/button1"
  android:layout_width="fill_parent"
  android:text="Button"></Button>
 <Button
  android:layout_height="wrap_content"
  android:id="@+id/button2"
  android:layout_width="fill_parent"
  android:text="Button"></Button>
 <Button
  android:layout_height="wrap_content"
  android:id="@+id/button3"
  android:layout_width="fill_parent"
  android:text="Button"></Button>
 <Button
  android:layout_height="wrap_content"
  android:id="@+id/button4"
  android:layout_width="fill_parent"
  android:text="Button"></Button>
</LinearLayout>


실행 결과




실행 결과의 확인은
소리라서 개인이 확인하셔야 합니다.

필자는 잘 되었습니다.

저작자 표시
신고
Trackback 1 : Comment 0

Write a comment