본문 바로가기
일상생활 이야기/안드로이드 스튜디오 독학하기

안드로이드 스튜디오 독학하기 20일째

by 인터넷떠돌이 2017. 3. 9.
반응형

안녕하세요?


이번 시간에는 [하루만에 배우는 안드로이드 앱 만들기]의 마지막 과제인 드럼박스를 만드는 과정을 포스팅 하고자 합니다.


먼저 새 프로젝트 만드기를 해서, 프로젝트의 이름을 Drumbox라고 지정을 한 다음, activity_main.xml의 design탭으로 가서 아래의 그림과 같이 버튼을 임의로 추가를 합니다.



위 스크린샷과 같이 임의로 버튼을 지정한 다음에, 이제 package explorer에 가서 아래의 그림과 같이 android resource directory를 추가하는 명령을 내리도록 합니다.



여기서는 어떻게 된 일인지는 모르겠지만, 폴더이름을 raw로 했을 때만 폴더가 생성이 되었고, 그 외의 다른 이름을 지정하려고 했더니 폴더가 생성되지 않았습니다. 그래서 폴더 이름을 raw로 지정해서 폴더를 생성했고, 미리 준비해둔 사운드 파일을 아래의 그림과 같이 배치를 했습니다.


raw 폴더에 wav파일을 배치하는 것은 간단했습니다. 일단 하드 디스크 드라이브에 임의의 폴더에 저장이 되어 있는 사운드 소스 파일을 복사한 다음, 안드로이드 스튜디오에 가서 Ctrl + V 를 누르는 것으로 간단하게 추가하는 과정이 완료 됩니다.


이렇게 raw폴더에 사운드 소스 파일을 추가하면, 실제 윈도우 탐색기를 이용해서 프로젝트가 설치가 된 폴더에 들어가 보면 wav 파일이 복사되어 있는 것을 볼 수 있습니다.


여기서 짐작이 가시는 분들도 많으실 것이라 생각이 되는데, 안드로이드 스튜디오 상에서 직접 입력을 하지 않아도, 하드 디스크 드라이브 안에서 직접 생성한 raw 폴더를 찾아가서 사운드 소스 파일을 복사해서 붙여넣기를 해도 문제는 없을 것이라는 생각이 듭니다.


사운드 파일의 형식에 대해서는 mp3형식도 가능을 할 것이라는 생각이 들기는 합니다만, 직접 확인은 안 해본 관계로 가능성은 잘 모르겠다는 생각이 듭니다. 아무튼 나중에 시험을 해보았을 때는 wav파일로는 아무런 문제 없이 사운드가 재생이 되는 것을 볼 수 있었습니다.


이제 사운드 재생의 소스가 되는 음원파일도 준비가 되었으니, MainActivity.java로 가서 코딩을 해야 할 단계가 되었습니다. 



여기서 먼저 사운드 파일의 재생을 위한 소스는 아래와 같습니다.


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

int 변수이름2 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

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


여기서 위 스크린샷을 보시면, 이런 식으로 되어 있는 것을 볼 수 있으실 것입니다.


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

int 변수이름2 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

int 변수이름3 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

int 변수이름4 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

int 변수이름5 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);


이런 식으로 본격적인 버튼을 누를때 반응을 코딩하기 이전에, 먼저 사운드풀이라는 것을 선언하고, 그 사운드 풀에서 특정 음원을 지정하는 코드를 미리미리 해 줍니다. 

그리고 나서, 버튼을 관계된 코드에서 아래와 같이 public void onClick (View v) { 아래에다가 마지막 코드를 입력해서 버튼을 누르면 사운드가 재생되도록 해 줍니다.


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


이런 식으로 구조가 되도록 하면 다음과 같이 전체적으로 나오게 됩니다.


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

int 변수이름2 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

int 변수이름3 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

int 변수이름4 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);

int 변수이름5 = 변수이름1.load(this,R.소스가 들어간 폴더이름.음원파일 이름,1);


Button 변수이름6 = (Button)findViewById(R.id.버튼의 ID);
변수이름6.setOnClickListener(new ViewOnClickListener(){
    public void onClick(View v) {
       변수이름1.play(변수이름2, 왼족볼륨, 오른쪽볼륨, 우선순위, 재생횟수, 재생속도);
}
});

이런 식으로 해서 전체적으로 코딩을 하였습니다만, 문제는 계속해서 코드에 에러가 있다는 부분이 나타나서, Alt+Enter를 눌러서 아래의 그림과 같이 수정이 되었습니다.


지금 제 레벨로는 이해가 안되지만, 자동으로 final 이라는 문구가 앞에 붙어서 저렇게 나왔습니다. 저게 어떤 의미인지는 모르겠습니다만, 아무래도 [하루만에 배우는 안드로이드 앱 만들기]라는 책에서는 나오지 않는 부분인 것으로 봐서, 최근에 추가된 무엇인가로 추정이 될 뿐입니다.



결과는 절반만 성공이었습니다. 버튼을 눌러서 원하는 소리가 나오게 하는 데는 성공하였지만, 문제는 버튼의 디자인이 완전히 실패해서, 버튼 4개가 겹쳐서 나왔습니다. 이걸 어떻게 해결해야 할지는 잘 모르겠습니다만, 아무래도 지난번 포스팅에서 구입한 새 책에서 따로 독학을 해야만 하는 부분이 아닌가 하는 생각이 듭니다.



아무튼 절반의 성공이지만, 책 한권의 내용을 다 돌파는 했습니다. 이제 남은 것은 다른 한권의 책을 읽으면서 더 실력을 키워 나가야 겠다는 생각이 듭니다.


반응형