单击项目时必须播放特定声音

时间:2016-02-16 14:50:24

标签: java android

我正在制作具有声音样本的词典应用程序,当单击列表中的项目时,将打开包含详细信息视图和按钮的新活动。有人可以帮助我如何将特定声音分配给按钮。声音文件放在原始文件夹中。例如,我点击了项目' araw',详细信息将显示,按钮必须播放声音...请帮助我...

继承人的代码:

ListView lv;
SearchView sv;


String[] tagalog= new String[] {"alaala (png.)","araw (png.)","baliw (png.)","basura (png.)",
        "kaibigan (png.)","kakatuwa (pu.)", "kasunduan (png.)","dambuhala (png.)",
        "dulo (png.)","gawin (pd.)","guni-guni (png.)","hagdan (png.)","hintay (pd.)",
        "idlip (png.)","maganda (pu.)","masarap (pu.)", "matalino (pu.)"};



ArrayAdapter<String> adapter;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    lv = (ListView) findViewById(R.id.listView1);
    sv = (SearchView) findViewById(R.id.searchView1);

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,tagalog);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String tagword =tagalog[position];


            String[] definition = getResources().getStringArray(R.array.definition);
            final String definitionlabel = definition[position];

            String[] cuyuno = getResources().getStringArray(R.array.cuyuno);
            final String cuyunodefinition = cuyuno[position];

            String[] english = getResources().getStringArray(R.array.english);
            final String englishdefinition = english[position];


            Intent intent = new Intent(getApplicationContext(), DefinitionActivity.class);
            intent.putExtra("tagword", tagword);
            intent.putExtra("definitionlabel", definitionlabel);
            intent.putExtra("cuyunodefinition",cuyunodefinition);
            intent.putExtra("englishdefinition", englishdefinition);




            startActivity(intent);

        }
    });


    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String text) {

            adapter.getFilter().filter(text);
            return false;
        }



    });

}

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    return super.onCreateOptionsMenu(menu);
}

}

DefinitionActivity.java

public class DefinitionActivity扩展了AppCompatActivity {

String tagalogword;
String worddefinition;
String cuyunoword;
String englishword;

int[] sounds = new int[]{R.raw.alaala,
        R.raw.araw,
        R.raw.baliw,
        R.raw.basura,
        R.raw.kaibigan,
        R.raw.kakatuwa,
        R.raw.kasunduan,
};



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_definition);


    TextView wordtv = (TextView) findViewById(R.id.wordtv);
    TextView definitiontv = (TextView) findViewById(R.id.definitiontv);
    TextView cuyunotv = (TextView) findViewById(R.id.cuyunotv);
    TextView englishtv = (TextView) findViewById(R.id.englishtv);
    Button play = (Button) findViewById(R.id.playbty);



    final Bundle extras = getIntent().getExtras();

    if (extras != null) {

        tagalogword = extras.getString("tagword");
        wordtv.setText(tagalogword);

        worddefinition = extras.getString("definitionlabel");
        definitiontv.setText(worddefinition);

        cuyunoword = extras.getString("cuyunodefinition");
        cuyunotv.setText(cuyunoword);

        englishword = extras.getString("englishdefinition");
        englishtv.setText(englishword);


    }

    play.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            // I do not know how to play the audio when button click

        }
    });

}

}

3 个答案:

答案 0 :(得分:1)

像佩迪夫所说,你应该使用SoundPool播放短音。

以下是我的俄罗斯方块游戏中的代码,活动创建实例并在加载声音时获得回调。

单身人士的例子:

public class Sounds {

    private Context ctx;
    private static Sounds mSounds = null;

    private static SoundPool mSPool = null;
    private int sound_gameover;
    private int sound_teil_drehen;
    private int sound_1_zeile;
    private int sound_2_zeile;
    private int sound_3_zeile;
    private int sound_4_zeile;

    private int soundsToLoad = 6;
     /**
     *   Volumecontrol
     */
    private AudioManager audioManager;
    private float actualVolume;
    private float maxVolume;
    private float volume;

    private IOnSoundReady callback = null;

    public static Sounds getInstance(Context ctx, IOnSoundReady mCallback){
        if(mSPool == null){
            mSounds =  new Sounds(ctx, mCallback);
        }
        return mSounds;
    }

    private Sounds(Context ctx, IOnSoundReady mIOSoundReady) {
        this.ctx = ctx;
        this.callback = mIOSoundReady;
        initVolume();

        AsyncTask<Void, Void, Void> mTask = new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                initSoundPool();
                return null;
            }
        };
        mTask.execute();
    }

    public void unprepare() { 
        if (mSPool == null) return;
        mSPool.release();
        mSPool = null;
    } 

    private void initSoundPool(){

        mSPool = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);

        mSPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                Log.w(TAG, "loaded soundid: " + sampleId);
                if(--soundsToLoad == 0 && callback != null){
                    callback.onSoundReady();
                }
            }
        });

        sound_gameover = mSPool.load(ctx, R.raw.game_over, 1);
        sound_teil_drehen = mSPool.load(ctx, R.raw.rotate, 1);
        sound_1_zeile = mSPool.load(ctx, R.raw.line_1,1);
        sound_2_zeile = mSPool.load(ctx, R.raw.line_2, 1);
        sound_3_zeile = mSPool.load(ctx, R.raw.line_3, 1);
        sound_4_zeile = mSPool.load(ctx, R.raw.line_4, 1);

    }

    /**
     * calculate volume
     */
    private void initVolume(){
        audioManager = (AudioManager) ctx.getSystemService(SpielActivity.AUDIO_SERVICE);
        actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        volume = actualVolume / maxVolume;
    }            

    /**
     * plays a sound
     * @param soundid 
     */
    public void playSound(int soundid){
        mSPool.play(soundid, volume, volume,1, 0, 1f);
    }
}

加载声音时使用的接口,由活动实现:

public interface IOnSoundReady {
    void onSoundReady();
}

您活动中的用法:

Sounds mySounds = Sounds.getInstance(this, this);

播放声音:

public static void playSound(int soundid) {
    mySounds.playSound(soundid);
}

希望我能帮上忙。

答案 1 :(得分:0)

//试试这种方式

    ListView lv;
    SearchView sv;


    String[] tagalog= new String[] {"alaala (png.)","araw (png.)","baliw (png.)","basura (png.)",
    "kaibigan (png.)","kakatuwa (pu.)", "kasunduan (png.)","dambuhala (png.)",
    "dulo (png.)","gawin (pd.)","guni-guni (png.)","hagdan (png.)","hintay (pd.)",
    "idlip (png.)","maganda (pu.)","masarap (pu.)", "matalino (pu.)"};



    ArrayAdapter<String> adapter;

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


lv = (ListView) findViewById(R.id.listView1);
sv = (SearchView) findViewById(R.id.searchView1);

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,tagalog);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String tagword =tagalog[position];


        String[] definition = getResources().getStringArray(R.array.definition);
        final String definitionlabel = definition[position];

        String[] cuyuno = getResources().getStringArray(R.array.cuyuno);
        final String cuyunodefinition = cuyuno[position];

        String[] english = getResources().getStringArray(R.array.english);
        final String englishdefinition = english[position];


        Intent intent = new Intent(getApplicationContext(), DefinitionActivity.class);
        intent.putExtra("tagword", tagword);
        intent.putExtra("definitionlabel", definitionlabel);
        intent.putExtra("cuyunodefinition",cuyunodefinition);
        intent.putExtra("englishdefinition", englishdefinition);
        // put position of the file 
        intent.putExtra("position", position);



        startActivity(intent);

    }
});


sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String text) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String text) {

        adapter.getFilter().filter(text);
        return false;
    }



});

}

@Override
  public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
   }


     // DictionaryActivity.class
public class DefinitionActivity extends AppCompatActivity {

    String tagalogword;
    String worddefinition;
    String cuyunoword;
    String englishword;

    int[] sounds = new int[]{R.raw.alaala,
    R.raw.araw,
    R.raw.baliw,
    R.raw.basura,
    R.raw.kaibigan,
    R.raw.kakatuwa,
    R.raw.kasunduan,
    };

     private int songPosition = 0;


    @Override
     protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_definition);


TextView wordtv = (TextView) findViewById(R.id.wordtv);
TextView definitiontv = (TextView) findViewById(R.id.definitiontv);
TextView cuyunotv = (TextView) findViewById(R.id.cuyunotv);
TextView englishtv = (TextView) findViewById(R.id.englishtv);
Button play = (Button) findViewById(R.id.playbty);



final Bundle extras = getIntent().getExtras();

if (extras != null) {

    tagalogword = extras.getString("tagword");
    wordtv.setText(tagalogword);

    worddefinition = extras.getString("definitionlabel");
    definitiontv.setText(worddefinition);

    cuyunoword = extras.getString("cuyunodefinition");
    cuyunotv.setText(cuyunoword);

    englishword = extras.getString("englishdefinition");
    englishtv.setText(englishword);

    songPosition = extras.getInt("position");  


}

play.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        // Play it here like
      MediaPlayer mediaPlayer=MediaPlayer.create(DictionaryActivity.class,sounds[position]);

      mediaPlayer.start();

    }
});

   }
    }

答案 2 :(得分:0)

您必须使用SoundPool

对于较短的声音效果,您可以使用SoundPool,否则您应该使用MediaPlayer。