-1

当我点击它们时,我的应用程序中有 16 个按钮可以播放声音。我想从 sd 卡中选择和导入声音。关于如何做到这一点的任何建议和例子?

这是我的 Java 代码:

public class App extends MultiTouchActivity {
SoundPool sp;
MediaPlayer mp;
int mSoundId, mSoundId1, mSoundId2, mSoundId3, mSoundId4, mSoundId5,
        mSoundId6, mSoundId7, mSoundId8, mSoundId9, mSoundId10, mSoundId11,
        mSoundId12, mSoundId13, mSoundId14, mSoundId15;
int mStreamId, mStreamId1, mStreamId2, mStreamId3, mStreamId4, mStreamId5,
        mStreamId6, mStreamId7, mStreamId8, mStreamId9, mStreamId10,
        mStreamId11, mStreamId12, mStreamId13, mStreamId14,
        mStreamId15 = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().clearFlags(
            WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    mSoundId = sp.load(this, R.raw.dub1, 1);
    mSoundId1 = sp.load(this, R.raw.dub2, 1);
    mSoundId2 = sp.load(this, R.raw.dub3, 1);
    mSoundId3 = sp.load(this, R.raw.dub4, 1);
    mSoundId4 = sp.load(this, R.raw.dub5, 1);
    mSoundId5 = sp.load(this, R.raw.dub6, 1);
    mSoundId6 = sp.load(this, R.raw.dub7, 1);
    mSoundId7 = sp.load(this, R.raw.dub8, 1);
    mSoundId8 = sp.load(this, R.raw.dub9, 1);
    mSoundId9 = sp.load(this, R.raw.dub10, 1);
    mSoundId10 = sp.load(this, R.raw.dub11, 1);
    mSoundId11 = sp.load(this, R.raw.dub12, 1);
    mSoundId12 = sp.load(this, R.raw.dub13, 1);
    mSoundId13 = sp.load(this, R.raw.dub14, 1);
    mSoundId14 = sp.load(this, R.raw.dub15, 1);
    mSoundId15 = sp.load(this, R.raw.dub16, 1);
}

//

public void dubstep1(View view) {
    if (mStreamId != 0) {
        sp.stop(mStreamId);
    }
    mStreamId = sp.play(mSoundId, 1, 1, 1, 0, 1f);
}

public void dubstep2(View view) {
    if (mStreamId1 != 0) {
        sp.stop(mStreamId1);
    }
    mStreamId1 = sp.play(mSoundId1, 1, 1, 1, 0, 1f);
}

public void dubstep3(View view) {
    if (mStreamId2 != 0) {
        sp.stop(mStreamId2);
    }
    mStreamId2 = sp.play(mSoundId2, 1, 1, 1, 0, 1f);
}

public void dubstep4(View view) {
    if (mStreamId3 != 0) {
        sp.stop(mStreamId3);
    }
    mStreamId3 = sp.play(mSoundId3, 1, 1, 1, 0, 1f);
}

public void dubstep5(View view) {
    if (mStreamId4 != 0) {
        sp.stop(mStreamId4);
    }
    mStreamId4 = sp.play(mSoundId4, 1, 1, 1, 0, 1f);
}

public void dubstep6(View view) {
    if (mStreamId5 != 0) {
        sp.stop(mStreamId5);
    }
    mStreamId5 = sp.play(mSoundId5, 1, 1, 1, 0, 1f);
}

public void dubstep7(View view) {
    if (mStreamId6 != 0) {
        sp.stop(mStreamId6);
    }
    mStreamId6 = sp.play(mSoundId6, 1, 1, 1, 0, 1f);
}

public void dubstep8(View view) {
    if (mStreamId7 != 0) {
        sp.stop(mStreamId7);
    }
    mStreamId7 = sp.play(mSoundId7, 1, 1, 1, 0, 1f);
}

public void dubstep9(View view) {
    if (mStreamId8 != 0) {
        sp.stop(mStreamId8);
    }
    mStreamId8 = sp.play(mSoundId8, 1, 1, 1, 0, 1f);
}

public void dubstep10(View view) {
    if (mStreamId9 != 0) {
        sp.stop(mStreamId9);
    }
    mStreamId9 = sp.play(mSoundId9, 1, 1, 1, 0, 1f);
}

public void dubstep11(View view) {
    if (mStreamId10 != 0) {
        sp.stop(mStreamId10);
    }
    mStreamId10 = sp.play(mSoundId10, 1, 1, 1, 0, 1f);
}

public void dubstep12(View view) {
    if (mStreamId11 != 0) {
        sp.stop(mStreamId11);
    }
    mStreamId11 = sp.play(mSoundId11, 1, 1, 1, 0, 1f);
}

public void dubstep13(View view) {
    if (mStreamId12 != 0) {
        sp.stop(mStreamId12);
    }
    mStreamId12 = sp.play(mSoundId12, 1, 1, 1, 0, 1f);
}

public void dubstep14(View view) {
    if (mStreamId13 != 0) {
        sp.stop(mStreamId13);
    }
    mStreamId13 = sp.play(mSoundId13, 1, 1, 1, 0, 1f);
}

public void dubstep15(View view) {
    if (mStreamId14 != 0) {
        sp.stop(mStreamId14);
    }
    mStreamId14 = sp.play(mSoundId14, 1, 1, 1, 0, 1f);
}

public void dubstep16(View view) {
    if (mStreamId15 != 0) {
        sp.stop(mStreamId15);
    }
    mStreamId15 = sp.play(mSoundId15, 1, 1, 1, 0, 1f);
}
4

1 回答 1

1

如果要从 SD 卡加载,则获取要播放的音频文件的路径,并使用SoundPool.load(String path, int priority). Environment.getExternalStorageDirectory将在此处对您有用,以帮助您查找文件。

另外作为旁注,您应该真正学习一些代码重用,您的手指会感谢您。没有理由为了改变一个变量而必须将相同的行为重复 16 次。

您可以将所有这 16 个函数替换为:

int[] mStreamIds = new int[16];
int[] mSoundIds = new int[16];

public void dubstep(int id) {
    if(mStreamIds[id] != 0){
       sp.stop(mStreamIds[id]);
    }
    mStreamIds[id] = sp.play(mSoundIds[id], 1,1,1,0,1f);
}
于 2012-10-29T18:12:43.420 回答