안녕하세요?


이번 포스팅에서 공부할 내용은 바로 버튼을 누르면 음악소리가 재생이 되는 앱을 만들어 보고자 하는 것입니다. 우선 새 프로젝트를 생성해서 이름을 Sample5-5로 지정을 합니다. 당연히 이번에도 첫 문자는 대문자로 지정을 합니다.


그리고 나서 먼저 package explorer에 있는 res폴더로 가서, 이 폴더를 우클릭합니다.



이번에는 new 메뉴에서 Android resource directory란 항목을 클릭해서 폴더를 따로 생성합니다. 이번에는 Directory name을 raw로 지정을 해서 만들어 둡니다.



다음으로는 앱 인벤터를 배울 때 사용한 적이 있었는 laughter.wav파일을 복사한 다음, 방금 생성한 raw 폴더에 붙여넣기를 해서 프로젝트 안으로 가지고 오도록 합니다.



실제로 붙여넣기를 했을 때, raw 폴더 아래에 laughter.wav라는 미디어 파일이 생성되어 있는 것을 package explorer에서 볼 수 있었습니다. 


다음으로는 activity_main.xml로 가서, design탭에서 기본적으로 있는 텍스트 레이블은 Hello World!를 삭제하고, 옆의 palette에서 버튼을 하나 끌어와서 중앙에 놓고, ID란에다가 button1으로 입력합니다.


화면에 대한 디자인이 끝이 났으면, 다음으로는 MainActivity.java항목으로 가서, 이제 코딩을 시작해야 하는 단계가 왔습니다. 


우선 import 항목 아래에다가 다음과 같이 코딩을 시작합니다.


SoundPool soundf;

Button btn;

int tom;



우선 위 스크린샷에서 보여지는 것 처럼 SoundPooll과 Button항목이 붉은색으로 표시가 되면서 그냥 둘 수 없으니, 이제는 Alt + Enter 키를 눌러서 Import class를 선택해서 다음 단계로 나아가도록 합니다. 실제로 이 import class를 선택하면, 위에 접혀 있는 import ... 항목에서 새로운 문장이 추가되는 것을 볼 수 있습니다.






그리고 기본적으로 프로젝트 생성시 있는 @Override 부터 setContentView(R.layout.activity_main);은 건너뛰고, 여기 바로 아래에다가 다음과 같이 코딩을 시작합니다.


soundf = new SoundPool(1.AudioManager.STREAM_MUSIC.0);

  tom = soundf.load(this,R.raw.laughter,1);

btn = (Button)findViewById(R.id.button1)

btn.setOnClickListener(new onClickListener() {

  public void onClick(View v)P

   sound.play(tom,1,1,0,0,1);

  }

});

}


제 경우에는 이런 코딩을 하면서 다음과 같은 문제가 발생하였습니다.


우선 왜 인지는 모르지만 new SoundPool이 순조롭게 입력이 안되고 SoundPool이라고 취소선이 그어진 상태로 입력이 되었습니다.


지금와서 생각해 보니 AudioManager의 타이핑 과정에서 오타가 나서 이런 오류가 생긱게 아닌가 하는 생각이 들기도 합니다만, 타이핑 오류를 수정하고 나서도 저 취소선은 사라지지 않았습니다.


사실 진짜 문제는 앱을 USB에 연결이 되어 있는 갤럭시 S2를 통해서 실행시켰을 때 발생하였습니다.


아무리 버튼을 눌러도 사운드가 재생이 되지 않는 문제가 생기는 것이였습니다.


일단 어디가 문제인지 몰라서 이리저리 헤메기는 했습니다만, 과거에 App Inventor2로 만들어둔 laugh bag이란 앱을 다시 실행시켜 봤습니다만, 이 앱에서도 같은 이름에 같은 사운드 파일이 재생되지 않았습니다.


정확하게 어디가 문제인지는 모르겠지만, 여기까지 오니까 사운드 파일에 어느정도 문제가 있는 것이 아닌가 하는 생각이 들어서 이번에는 다른 사운드 파일을 대체해서 시도를 하였습니다. 이 과정에서 알 수 있었는 것이 하나 있는데, 사운드 파일 이름은 반드시 문자열이 되어야 하지, 숫자로 구성하면 에러가 뜬다는 것이었습니다.



위 스크린샷에서 보이는 것 처럼, sound.wav로 이름을 바꾸어서 다시 raw 폴더에 올린다음 앱을 실행했을 때 제대로 사운드가 나오는 것을 볼 수 있었습니다.


이번 실습에서 느낀것이 하나 있다면, 첫째로 앱 인벤터2가 얼마나 간편하게 앱하나 만들 수 있는가 하는 점이였습니다. 과거에 같은 종류의 실습을 했을 때, 앱 인벤터2는 코딩마져 필요 없었다는 것이였습니다. 하지만, 이런 편리함에도 불구하고 가지가지 기능에 한계가 있기에 안드로이드 스튜디오를 독학하고 있는데.....


더 많은 기능이 있는 만큼 고생할 부분도 더 많은 듯 합니다.


아무튼 이번 실습으로 겨우 알게된 것이 하나 있는데


SoundPool 변수이름1 = new SoundPool(1,AudioManager.STREAM_MUSIC,0)

int 변수이름2 = 변수이름1.load(this,R.폴더이름.음원파일이름,1);

변수이름1.play(변수이름2,왼쪽 볼륨,오른쪽 볼륨,우선순위,재생횟수,재생속도);


여기서 왼쪽 오른쪽이란 것은 스피커나 이어폰 왼쪽 오른쪽이라는 것을 의미하며, 0~1사이의 값을 지정해서 소리의 크기를 조절할 수 있습니다.


다음으로 재생횟수는 몇번 반복하느냐를 지정하는 것인데, -1로 지정하면 무한반복됩니다.

마지막으로 재생속도의 경우에는 1은 정상속도, -1은 느리게, 2는 빠르게로 지정합니다.


이번 실습에서 마지막줄


변수이름1.play(변수이름2,외쪽 볼륨, 오른쪽 볼륨, 우선순위, 재생횟수, 재생속도);


이걸 버튼 class안쪽에 두어서 버튼이 눌러지면 사운드가 재싱되는 것으로 만들어 둔 것을 보입니다. 


+ Recent posts

티스토리 툴바