从soundpool中的playnig资源文件夹中读取声音

时间:2017-03-11 19:26:35

标签: java android

我想从资产中读取我的声音,这是一个可以猜测的游戏。 现在我的声音在原始文件夹中,现在我想从资产中读取它们。 我谷歌它,我也发现一些正常工作的代码,但我可以读取第一个声音。

看看我的代码:

这里我从原文中读到:

 int sound_id = mContext.getResources().getIdentifier(SoundFile, "raw",
                mContext.getPackageName());
        soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                loaded = true;
            }
        });
        soundID = soundPool.load(this, sound_id, 1);

在这里我使用代码,但它只是播放我的第一个声音

   private static void initiate() {
    XmlPullParserFactory pullParserFactory;
    try {
        pullParserFactory = XmlPullParserFactory.newInstance();

        XmlPullParser parser = pullParserFactory.newPullParser();

        InputStream in_s = G.context.getAssets().open("temp.xml");
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
        parser.setInput(in_s, null);
        routpic.parseXML(parser);
    } catch (XmlPullParserException e) {

        e.printStackTrace();
        Log.i("EROR", "nabod");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.i("EROR", "nabod");

    }
    array_audio.clear();
    for (int i = 0; i < routpic.names.size(); i++) {
        array_audio.add(routpic.names.get(i));
        Log.i("LOG2", "" + routpic.names.get(i));
    }


}
private void play(int index) {
    mediaPlayer.release();
    index++;
    index=soundID;
    String s = "mp3/a" + index + ".mp3";
    //Resources resources = getResources();

    AssetFileDescriptor afd;
    try {
        afd = getAssets().openFd(s);
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        mediaPlayer.prepare();
        mediaPlayer.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

和我的资产:

 <mp3>
    <name>1</name>
</mp3>

2 个答案:

答案 0 :(得分:0)

我得到答案我取消了soundpool,我使用了madiapalayer。 通过这种方式,我从资产文件夹中读取了我的音乐。 我将我的音乐放在mp3文件夹中,如下所示:

  AssetFileDescriptor afd;
        try {
            afd = getAssets().openFd("mp3/" + "a" + lvl + ".mp3");
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            mediaPlayer.prepare();
            //mediaPlayer.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

之后,我轻松地开始我的媒体播放器。

答案 1 :(得分:-1)

enter image description here

变量

textview_Number.animate().setDuration(500).rotationBy(360f).setListener(object : Animator.AnimatorListener {
                override fun onAnimationRepeat(animation: Animator?) {}

                override fun onAnimationCancel(animation: Animator?) {}

                override fun onAnimationStart(animation: Animator?) {}

                override fun onAnimationEnd(animation: Animator?) {
                     button_randomize.isEnabled = true
                }
            })
        }

将此代码放在onCreate您的活动或片段中

private SoundPool soundPool;
private AssetFileDescriptor afd;

从资产文件夹加载并播放mp3文件

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        AudioAttributes audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_GAME)
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .build();
        soundPool = new SoundPool.Builder()
                .setMaxStreams(1)
                .setAudioAttributes(audioAttributes)
                .build();
} else {
   soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
}
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            soundPool.play(sampleId, 1.0f, 1.0f, 0, 0, 1.0f);
        }
});

从原始目录加载并播放mp3文件

try {
  afd = getResources().getAssets().openFd("mp3/ba.mp3");
}
catch (IOException e) {
    e.printStackTrace();
}
soundPool.load(afd, 1);