如何在android studio中以原始音频文件夹的形式得到答案

时间:2017-01-09 15:50:05

标签: android audio

这一系列问答, R.raw.ikhlas的例子是回答R.raw.jwbalikhlas的问题

int[] rawQuetion = {R.raw.alfalaq, R.raw.alikhlas, R.raw.alkafirun, R.raw.allahab};
int [] rawAnswer={R.raw.jwbaliklas};

这种随机化问题的方法

 //fisher-yates Shuffle
public void playSoal() {
    shuffleArray(rawQuetion);
    try{
        int idx = new Random().nextInt(rawQuetion.length);
        mp = MediaPlayer.create(this, rawQuetion[idx]);
        mp.start();

    }catch(Exception e){
        Log.e("ERROR", "Media Player", e);
        mp = null;
        mp.release();
        mp.stop();
        e.printStackTrace();

    }
}

static void shuffleArray(int[] arr)
{
    Random rnd = new Random();
    for (int i = arr.length - 1; i > 0; i--)
    {
        int index = rnd.nextInt(i + 1);
        // Swap
        int a = arr[index];
        arr[index] = arr[i];
        arr[i] = a;
    }
}

我想在随机选择的测验问题时,会在这里回答

public void audioFile() throws IOException{
    InputStream is = getResources().openRawResource(R.raw.jwbaliklas);//I want this to be obtained from the above array

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    BufferedInputStream in = null;
    in = new BufferedInputStream(is);

    int read;
    byte[] buff = new byte[1024];
    while ((read = in.read(buff)) > 0)
    {
        out.write(buff, 0, read);
    }
    out.flush();
    byte[] audioBytes = out.toByteArray();

    for (int i = 0; i < audioBytes.length; i++) {
        audioBytes[i] = (byte) ((audioBytes[i]) & 0xFF);       }

    absNormalizedSignal = hitungFFT(audioBytes);
    AppLog.logString("===== From audio File");


}

1 个答案:

答案 0 :(得分:0)

如果传递要打开的资源的数组ID,则可以直接从整数数组中使用索引(只要从audioFile范围可见。

public void audioFile(@RawRes int i) throws IOException {
    InputStream is = getResources().openRawResource(rawQuestion[i]);
    ...
}

此外,您必须更改包含注释@RawRes

@RawRes int[] rawQuestion = {R.raw.alfalaq, R.raw.alikhlas, R.raw.alkafirun, R.raw.allahab};
@RawRes int[] rawAnswer = {R.raw.jwbaliklas};