2017-01-09 2 views
0

Этот массив вопросов и ответов, 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"); 


} 

ответ

0

Если вы передадите идентификатор массива для ресурса, который хотите открыть, вы можете использовать индекс непосредственно из массива целых чисел (пока он виден из области 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}; 
+0

я вижу. но я все еще смущен, как я могу написать код для R.raw.jwbaliklas is R.raw.alikhlas answer. так что существует значение InputStream is = getResources(). openRawResource (rawQuetion [i]); R.raw.jwbaliklas –

+0

Вы должны аннотировать переменную с помощью '@ RawRes' (как я отредактировал выше) –

+0

спасибо, я попробую сначала. Большое спасибо –