Zeichnen Sie Sprache in einer Warteschlange <Byte []> auf und senden Sie sie an den Server

Ich entwickle eine Sprachanwendung.

Ich benötige eine Art Pufferwarteschlange, damit ich kontinuierlich in einem Thread aufzeichne, die Puffer voller Bytes in die Warteschlange lege und zum Server übertrage, und den nächsten Puffer aus der Warteschlange nehme.

Hier ist der Aufnahmecode:

     Queue<byte[]> qArray = new LinkedList<byte[]>();
     recordingThread = new Thread(new Runnable() {

        @Override
        public void run() {

            bData = new byte[BufferElements];

            while (isRecording) {
                recorder.read(bData, 0, BufferElements);
                qArray.add(bData);
                if (AudioRecord.ERROR_INVALID_OPERATION != 0) {
                    SendAudio();

                }

            }
        }
    }, "AudioRecorder Thread");
    recordingThread.start();

Es fehlen jedoch immer noch einige Byte [] -Daten, während sie an den Server gesendet werden

Hier ist die sendende Stimme zum Servercode:

           try {
            HttpClient httpclient = new DefaultHttpClient();


            HttpPost httppost = new HttpPost(ServerUrl.url_audio);

            // Json Format
            JSONObject holder = new JSONObject();
            JSONArray jArray = new JSONArray();
            try {

                byte[] tmparr = qArray.poll();
                for (int i = 0; i < tmparr.length; i++) {
                    jArray.put(i, tmparr[i]);
                }

                holder.put("Voice", jArray);

Ich möchte keine Daten verpassen, die aufgezeichnet werden.

Jede Hilfe wäre sehr dankbar. Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage