Содержимое массива Android в два раза больше при записи в файл? - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть приложение, которое записывает аудио образцы.как только запись сделана, она сохраняется на SDCard в файле reversme.pcm.Затем я могу ввести имя файла, и приложение создает файл под этим именем и копирует содержимое reveseme.pcm в новый файл под новым именем файла.у меня проблема в том, что новый файл в два раза больше оригинала, и когда я пытаюсь его воспроизвести, звука нет.Я проверил это через дерзость, и там нет звуковых данных.размер файла ровно вдвое больше.есть идеи?вот какой-то код 'code'

File tempFile = new File(Environment.getExternalStorageDirectory().
                          getAbsolutePath() + "/"+"reverseme.pcm");
                  File saveFile = new File(Environment.getExternalStorageDirectory().
                          getAbsolutePath() + "/"+fileNameToSave);

                  short[] tempArray = new short[(int)tempFile.length()];
                  Log.i("tempfile length = ", ""+tempFile.length());
                  Log.i("tempArray length = ", ""+tempArray.length);
                  try {
                    // Create a DataInputStream to read the audio data back from the saved file.
                    InputStream is = new FileInputStream(tempFile);
                    BufferedInputStream bis = new BufferedInputStream(is);
                    DataInputStream dis = new DataInputStream(bis);

                    // Read the file into the music array.
                    int i = 0;
                    while (dis.available() > 0) {
                    //music[musicLength-1-i] = dis.readShort();
                      tempArray[i] = dis.readShort();

                    i++;
                    }
                    dis.close();
                    Log.i("tempArray length after read = ", ""+tempArray.length);


                    // Create a DataOuputStream to write the temp array into the saved file.
                    FileOutputStream os = new FileOutputStream(saveFile);
                    BufferedOutputStream bos = new BufferedOutputStream(os);
                    DataOutputStream dos = new DataOutputStream(bos);

                  Log.i("tempArray length before writing to sdcard = ", ""+tempArray.length);
                    for (int c = 0; c < tempArray.length; c++){
                    dos.writeShort(tempArray[i]);

                    }
                    Log.i("tempfile length after writing to sdcard = ", ""+tempArray.length);
                    dos.close();
                    } catch (Exception e) {

                    e.printStackTrace();
                    }


                  return true;
                }
                return false;
            }
        });

    }

}

1 Ответ

1 голос
/ 21 февраля 2011

Метод readShort подходит для чтения данных, записанных с использованием writeShort.Вы не можете использовать его для чтения любых данных.Вы должны использовать читать (байт []) и писать (байт [])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...