본문 바로가기

그러냐

SoundPool play not working (LG폰이 안되는줄) 본문

android

SoundPool play not working (LG폰이 안되는줄)

관절분리 2017. 7. 5. 17:01
반응형


SoundPool.play 를 서비스단에서 사용하여 재생을 잘 하고 있었으나 LG 기기에서 안되는 현상이 발생했다.


그러다가 아래 글을 보게되었다. 즉 너무 빨리 재생하면 안된다는 내용.

그래서 그냥 sleep을 몇 초 줘서 해결.






출처 : http://www.androidpub.com/1765774



SoundPool 을 사용 못하고 있습니다.


안녕하세요?


SoundPool 을 사용하고 싶은대 당췌 소리가 안나와서 고민입니다.


에러메세지라도 뜨면 코드가 잘못되었겠거니.. 하겠지만... 이건 에러 메세지도 없고

프로그램 실행도 잘 되는대, 소리만 안나옵니다... 물론 파일은 재대로 있고 파일명도 소문자입니다.

mp3파일이 안될 경우가 있다고 해서 wav파일로도 넣어봤는대 그래도 소리가 나올 생각을 안합니다.

소스코드를 이리 바꾸고 저리바꾸고 심지어 인터넷에 떠있는예제 파일을 그대로 붙여놔도

도저히 소리가 안나옵니다.  뭐가 문제일까요? 메니페스트 파일에 뭐 추가해야할 Permissions 가 있나요?


package com.soundPoolEx;


import android.app.Activity;  

import android.media.*;  

import android.os.Bundle;  


public class SoundPoolEx extends Activity 

{


    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

     super.onCreate(savedInstanceState);  

     setContentView(R.layout.main);

     SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

     int sound1;  

     sound1 = pool.load(this, R.raw.a, 1);

     pool.play(sound1, 1, 1, 0, -1, 1);

    }//end onCreate

}//end class SoundPoolEx

/**저도 크롬인지라 소스 하이라이트가....조금 이상하네용..^^; */

소중한 조언 해주시면 정말 감사히 받도록 하겠습니다. 

:D


 

댓글
2011.09.26 13:04:26
id: AdamWorldAdamWorld

manifest 에는 추가할것이 없습니다.

그리고 소스에도 문제될것이 없는것 같은데...

이 어플을 가져다 실행해 보세요.(부분소스 복사마시고 통체로 빌드-실행)

만일 이 어플에서도 소리가 안나오면 코드에 문제가 있는것이 아니라 android sdk에 이상이 생긴것으로 보이네용

물론 해당 리소스에 있는 음원이 기기에서는 곧잘 플레이 되겠지요~~~

댓글
2011.09.26 13:27:52
R00T

AdamWorld님, 소스까지 올려주시고 큰 도움에 정말 진심으로 감사드립니다. 


올려주신 소스로 테스트 해봤는대, 주신 소스는 소리가 정말 잘 나옵니다.


하아.. 그럼 뭔가 어디 삼천포에서 문제가 있다는건대... 그 삼천포가 도대체 뭘지.. 감을 못잡겠네요....



댓글
2011.09.26 13:45:43
포로뤼햐

init 을 한후에... 어느정도 약간의 대기 시간을 갖은 이후에.. play 하시면 되요..

설명서를 보면 init 와 play가 따로 구분되어 있어서.. 뭔가 약간의 준비 작업이 필요한가 봅니다..

 

댓글
2011.09.26 15:23:43
R00T

이 SoundPool 이 아주 웃기는 클래스네요...

이걸로 한 3일 밤낮으로 고민했는대, 플레이메소드를 따른 버튼으로 뽑으니 드디어 소리가 나네요... 그것도 왜인지는 모르겠는대, 버튼 하나 넣을때는 소리가 안나더니... 똑같은 소스로 버튼 5개 만들어 넣으니 소리가 나왔다가... 근대 이것도 중간에 소리가 갑자기 다 먹통이 되는 경우도 있구요.... 며칠전에 버튼 하나 넣었을때 소리가 나줬다면 이렇게 머리 빠지지는 않았을 터인대....ㅡ_-....일단 소리 내는건 성공 시켰는대, 뭔가 안정적으로 소리내기에는... 다른 뭔가를 좀 사용해봐야 할듯 합니다. API에서 파일 로딩 시키는 뭔가 다른놈이 하나 더 있다고 봤던거 같던대 그놈좀 더 찾아 봐야겠네요.... 파일 로딩 시키는 것까지 함께 들어 있는 소스 있으시면 구경 좀 했으면 참 좋겠다는 바람입니다. ^^;;


일단 소리는 나오는 플레이 메소드를 따른 버튼으로 뺀 소스 입니다.


package com.oundPoolEx2;


import android.app.Activity;

import android.media.*;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.*;


public class SoundPoolEx2 extends Activity implements OnClickListener

{

private Button btn_1;

private Button btn_2;

private Button btn_3;

private Button btn_4;

private Button btn_5;


SoundPool pool;

int sound1;

int sound2;

int sound3;

int sound4;

int sound5;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) 

    {

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);

        pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

        sound1 = pool.load(this, R.raw.c, 1);

        sound2 = pool.load(this, R.raw.d, 1);

        sound3 = pool.load(this, R.raw.e, 1);

        sound4 = pool.load(this, R.raw.f, 1);

        sound5 = pool.load(this, R.raw.g, 1);


        btn_1 = (Button)findViewById(R.id.button1);

        btn_2 = (Button)findViewById(R.id.button2);

        btn_3 = (Button)findViewById(R.id.button3);

        btn_4 = (Button)findViewById(R.id.button4);

        btn_5 = (Button)findViewById(R.id.button5);


        btn_1.setText("-----C-----");

        btn_2.setText("-----D-----");

        btn_3.setText("-----E-----");

        btn_4.setText("-----F-----");

        btn_5.setText("-----G-----");

        

        btn_1.setOnClickListener(this);

        btn_2.setOnClickListener(this);

        btn_3.setOnClickListener(this);

        btn_4.setOnClickListener(this);

        btn_5.setOnClickListener(this);



    }//end onCreate()


@Override

public void onClick(View v)

{

if(v.getId() == R.id.button1) pool.play(sound1, 1, 1, 0, 1, 1);

if(v.getId() == R.id.button2) pool.play(sound2, 1, 1, 0, 1, 1);

if(v.getId() == R.id.button3) pool.play(sound3, 1, 1, 0, 1, 1);

if(v.getId() == R.id.button4) pool.play(sound4, 1, 1, 0, 1, 1);

if(v.getId() == R.id.button5) pool.play(sound5, 1, 1, 0, 1, 1);

}//end onClick()

}//end Class SoundPoolEx2


참 더럽게 웃기는 소스죠?.... 

댓글
2011.09.26 20:42:37
안드로이드개발자이고싶다

사운드 재생을 핸들러를 사용해 보는건 어떠신지요?

저도 어플 하나 만들어서 soundpool 을 사용했는데 이 사운드 풀이 참 웃기더군요.

사운드가 반복터치시 처음 터치만 소리가 재생되고 그 다음부터는소리재생이 안되는 문제도 생기고 그렇다고

매번 사운드 재생할때마다 재생 스톱 메몰리릴리즈 다시생성 이럴 수는 없고 그래서 제가 사용한 방법이 핸들러를 

이용하는 방법입니다.


위 코드에서 버튼 클릭시 핸들러를 호출하고 사운드 play는 핸들러에서 처리하도록 하면 좀더 제대로된 사운드가 

재생될듯 하네요.


댓글
2011.09.27 10:58:03
건방진프로그래머
profile

저도 처음에 이거땜에 고생좀했는데 ㅎㅎ

 

사운드 풀은 onCreate에서 생성하고 바로 실행하면.. 절대 네버 소리가 안나더군요....

 

핸들러쓰면 소리가 나요... ㅡ,.ㅡ 왜 그런진 저도 잘모르겠더군요.. 일부러 그렇게 만들어 놓은건지..

 

저 같은경우는 반복터치음은 초입부에서 HashMap에 집어넣고 그거 호출해서 쓰고있어요... ㅎㅎ 자주 로드할필요 읍어서 편하더군요

댓글
2011.09.27 12:39:13
R00T

혹시 헨들러를 이용한 예제좀 볼수 없을까요?....ㅎㅎ^^;

댓글
2011.09.27 18:28:50
안드로이드개발자이고싶다
1.핸들러를 생성합니다.

Handler handler = new Handler() {
public void handleMessage(Message msg) {  
if(조건 만족시){ //사운드 재생
streamID = pool.play(load_sound[msg.arg2], 1, 1, 0, 0, 1f);
}
else{      //사운드 정지
pool.stop(streamID);
}

2. 핸들러 호출(버튼 클릭시)

handler.sendMessage(msg);


핸들러 안에 조건에 맞으면 사운드 재생 정지 코드에 맞게 정하고요
핸들러 호출부분에서 msg는 Messge 의 객체로 어떠 특정한 값을 넘기는 건데 
이값은 알아서 정하면 됩니다. (재생시 조건값등) 
댓글
2011.09.29 17:28:50
R00T

감사합니다. 정말 많은 도움이 되었습니다. 이리 저리 테스트 좀 더 해보고, 혹시 또 다른 분들 도움이 될수 있는 완전한 테스트 코드 하나 만들어서 올릴수 있도록 해봐야겠습니다. :D


반응형