2015-12-02 4 views
1

Я пытаюсь жить потоковым в android на сервере. Моя программа работает нормально.BufferSize уменьшается в android AudioRecord

Метод, который начинает потоковым:

private void startStreaming() { 

    Thread startRecord = new Thread(
      new Runnable() { 
       @Override 
       public void run() { 
        try { 
         socket = new DatagramSocket(); 
        } catch (SocketException e) { 
         e.printStackTrace(); 
        } 

        buffer = new byte[minBufSize]; 

        DatagramPacket packet; 

        try { 
         destination = InetAddress.getByName("10.31.0.12"); 
        } catch (UnknownHostException e) { 
         e.printStackTrace(); 
        } 

        record = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize * 10); 

        record.startRecording(); 

        while (status) 
        { 
         minBufSize = record.read(buffer,0,buffer.length); 
         packet = new DatagramPacket(buffer,buffer.length,destination,port); 
         Log.d(LOG,"Writing in status " + destination); 
         try { 
          Log.d(LOG, "Trying to send. " + minBufSize); 
          socket.send(packet); 
          Log.d(LOG, "Sent successfully."); 
         } catch (IOException e) { 

          Log.d(LOG,"Socket is not sending properly."); 
          e.printStackTrace(); 
         } 
        } 

       } 
      } 
    ); 
    startRecord.start(); 
} 

Метод, который останавливает запись:

public void stopRecording(View view) { 
    start.setVisibility(View.VISIBLE); 
    stop.setVisibility(View.GONE); 
    status = false; 
    Log.d(LOG,"I am about to release the record."); 
    record.release(); 
    Log.d(LOG, "I have released."); 
} 

Я получаю minBufSize используя

minBufSize = record.read(buffer,0,buffer.length); 

Если я продолжаю остановки и воспроизведения записи , minBufSize продолжает уменьшаться. Значения изменяется от 1280 до 512 до 256 до -3 и, наконец, я получаю:

java.lang.NegativeArraySizeException: -3 на
com.example.khan.safevoicerecorder.MainActivity $ 1.Run (MainActivity. java: 81)

Почему это происходит? Пожалуйста, помогите мне решить эту проблему.

+0

Я могу установить minBufSize каждый раз, когда начинаю запись, но все же путаю, почему произошло выше. – learner

ответ

1

Вы создаете buffer с использованием тока minBufSize. Затем ваша петля читает некоторое время: minBufSize = record.read(buffer,0,buffer.length). Так как чтение будет не более buffer.length байт, вы можете теперь уменьшить minBufSize.

В следующий раз, когда вы начнете запись, ваш буфер будет создан с новым, меньшим minBufSize. Опять же, чтение будет не более buffer.length байт (что теперь меньше, чем в последний раз).

Промыть и повторить - тогда, в конце концов, вы получите очень маленький буфер. Я предполагаю, что это дает вам значение ошибки -3. И, наконец, когда minBufSize - -3, ваше распределение buffer не удастся; массив не может иметь отрицательный размер.

+0

Благодарим вас за ответ. Хотя, я решил проблему, каждый раз инициализируя minBufSize, но не смог понять. – learner

Смежные вопросы