凌雪
2018-10-24
来源 :网络
阅读 1210
评论 0
摘要:本文将带你了解Android应用开发之Android开发:创建SoundPool、加载音频文件、播放音频,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发之Android开发:创建SoundPool、加载音频文件、播放音频,希望本文对大家学Android有所帮助。
BeatBox.java
package com.example.aster.beatbox; import android.content.Context;import android.content.res.AssetFileDescriptor;import android.content.res.AssetManager;import android.media.AudioManager;import android.media.SoundPool;import android.util.Log; import java.io.IOException;import java.util.ArrayList;import java.util.List; public class BeatBox { private static final String TAG = "BeatBox"; private static final String SOUNDS_FOLDER = "sample_sounds"; private static final int MAX_SOUNDS = 5; private AssetManager mAssets; private List<sound> mSounds = new ArrayList<>(); private SoundPool mSoundPool; public BeatBox(Context context) { mAssets = context.getAssets(); // This old constructor is deprecated, but we need it for compatibility. mSoundPool = new SoundPool(MAX_SOUNDS, AudioManager.STREAM_MUSIC, 0); loadSounds(); } public void play(Sound sound) { Integer soundId = sound.getSoundId(); if (soundId == null) { return; } mSoundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f); } private void loadSounds() { String[] soundNames; try { soundNames = mAssets.list(SOUNDS_FOLDER); Log.i(TAG, "Found " + soundNames.length + " sounds"); } catch (IOException ioe) { Log.e(TAG, "Could not list assets", ioe); return; } for (String filename : soundNames) { try { String assetPath = SOUNDS_FOLDER + "/" + filename; Sound sound = new Sound(assetPath); load(sound); mSounds.add(sound); } catch (IOException ioe) { Log.e(TAG, "Could not load sound " + filename, ioe); } } } private void load(Sound sound) throws IOException { AssetFileDescriptor afd = mAssets.openFd(sound.getAssetPath()); int soundId = mSoundPool.load(afd, 1); sound.setSoundId(soundId); } public List<sound> getSounds() { return mSounds; }}</sound></sound>
BeatBoxActivity.java
package com.example.aster.beatbox; import android.support.v4.app.Fragment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle; public class BeatBoxActivity extends SingleFragmentActivity { @Override protected Fragment createFragment() { return BeatBoxFragment.newInstance(); }}
BeatBoxFragment.java
package com.example.aster.beatbox; import android.databinding.DataBindingUtil;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup; import com.example.aster.beatbox.databinding.FragmentBeatBoxBinding;import com.example.aster.beatbox.databinding.ListItemSoundBinding; import java.util.List; public class BeatBoxFragment extends Fragment { private BeatBox mBeatBox; public static BeatBoxFragment newInstance() { return new BeatBoxFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBeatBox = new BeatBox(getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { FragmentBeatBoxBinding binding = DataBindingUtil .inflate(inflater, R.layout.fragment_beat_box, container, false); binding.recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3)); binding.recyclerView.setAdapter(new SoundAdapter(mBeatBox.getSounds())); return binding.getRoot(); } private class SoundHolder extends RecyclerView.ViewHolder { private ListItemSoundBinding mBinding; private SoundHolder(ListItemSoundBinding binding) { super(binding.getRoot()); mBinding = binding; } } private class SoundAdapter extends RecyclerView.Adapter<soundholder> { private List<sound> mSounds; public SoundAdapter(List<sound> sounds) { mSounds = sounds; } @Override public SoundHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(getActivity()); ListItemSoundBinding binding = DataBindingUtil .inflate(inflater, R.layout.list_item_sound, parent, false); return new SoundHolder(binding); } @Override public void onBindViewHolder(SoundHolder holder, int position) { } @Override public int getItemCount() { return mSounds.size(); } }}</sound></sound></soundholder>
SingleFragmentActivity.java
package com.example.aster.beatbox; import android.os.Bundle;import android.support.annotation.LayoutRes;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v7.app.AppCompatActivity; public abstract class SingleFragmentActivity extends AppCompatActivity { protected abstract Fragment createFragment(); @LayoutRes protected int getLayoutResId() { return R.layout.activity_fragment; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutResId()); FragmentManager fm = getSupportFragmentManager(); Fragment fragment = fm.findFragmentById(R.id.fragment_container); if (fragment == null) { fragment = createFragment(); fm.beginTransaction().add(R.id.fragment_container, fragment).commit(); } }}
Sound.java
package com.example.aster.beatbox; public class Sound { private String mAssetPath; private String mName; private Integer mSoundId; public Sound(String assetPath) { mAssetPath = assetPath; String[] components = assetPath.split("/"); String filename = components[components.length - 1]; mName = filename.replace(".wav", ""); } public String getAssetPath() { return mAssetPath; } public String getName() { return mName; } public Integer getSoundId() { return mSoundId; } public void setSoundId(Integer soundId) { mSoundId = soundId; }}
SoundViewModel.java
package com.example.aster.beatbox; import android.databinding.BaseObservable;import android.databinding.Bindable; public class SoundViewModel extends BaseObservable { private Sound mSound; private BeatBox mBeatBox; public SoundViewModel(BeatBox beatBox) { mBeatBox = beatBox; } @Bindable public String getTitle() { return mSound.getName(); } public Sound getSound() { return mSound; } public void setSound(Sound sound) { mSound = sound; notifyChange(); }}
avtivity_fragment.xml
<!--?xml version="1.0" encoding="utf-8"?--><framelayout android:id="@+id/fragment_container" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="https://schemas.android.com/apk/res/android"></framelayout>
fragment_beat_box.xml
<!--?xml version="1.0" encoding="utf-8"?--><layout xmlns:android="https://schemas.android.com/apk/res/android"> </android.support.v7.widget.recyclerview></layout>
list_item_sound.xml
<!--?xml version="1.0" encoding="utf-8"?--><layout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools"> <data> <variable name="viewModel" type="com.example.aster.beatbox.SoundViewModel"> </variable></data><button android:layout_height="120dp" android:layout_width="match_parent" android:text="@{viewModel.title}" tools:text="Sound name"></button></layout>
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号