无法通过Android应用程序将音频文件上传到Parse.com

时间:2014-08-05 05:20:53

标签: java android audio parse-platform record

在我的Android应用程序中,我试图通过手机麦克风录制音频,播放它,将其存储在Parse.com上。最终目标是允许其他设备流式传输音频文件。

我可以成功录制音频 - 这是我怎么做的:(格式在这里指定为.3gpp,但.wav也一直在为我工作)

 mRecorder = new MediaRecorder();
 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
 AudioRecordTest();
 mRecorder.setOutputFile(mFileName);
 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

" mFileName"设置在这里:

 mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
 mFileName += "/audiorecordtest.3gpp";

我也可以播放该文件。这很好。 然后我尝试将其保存为Parse作为解析文件,并将其附加到解析对象。像这样:

 byte[] data = mFileName.getBytes();
 ParseUser currentUser = ParseUser.getCurrentUser();
 String usernameText = currentUser.getUsername();
 String mUploadName = usernameText + "_recording.3gpp";
 ParseFile file = new ParseFile(mUploadName, data);
 file.saveInBackground();
 ParseObject audioRecordings = new ParseObject("AudioRecording");
 audioRecordings.put("Submitter", usernameText);
 audioRecordings.put("AudioFile.3gpp", file);
 audioRecordings.put("PositiveScore", 0);
 audioRecordings.put("Negativescore", 0);
 audioRecordings.put("Parent", currentUser);
 audioRecordings.saveInBackground();

现在,我可以在Parse.com的数据浏览器上看到对象和文件。如果我点击音频文件,我将被带到一个音频播放器(所以Parse至少将它识别为音频),但它不会播放任何内容。所以这个文件出了问题。

以下是我用来流音频的内容:

 mPlayer = new MediaPlayer();
 ParseQuery<ParseObject> query = ParseQuery.getQuery("AudioRecording");
 query.getInBackground("YkfHDl2aEG", new GetCallback<ParseObject>() {
      @Override
      public void done(ParseObject recording, com.parse.ParseException e) {
             if (e != null) { ... }
             else {
                  ParseFile audioFile = recording.getParseFile("audioFile");
                  ParseFile audioFile = recording.getParseFile("audioFile"); 
                  String audioFileURL = audioFile.getUrl();
                  mPlayer = new MediaPlayer();
                  mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                  try { mPlayer.setDataSource(audioFileURL); } 

然后,我播放声音。我知道我有这个部分是正确的,因为如果我用这个&#34; http://www.pocketjourney.com/downloads/pj/tutorials/audio.mp3&#34;替换audioFileURL,它就可以了。 Parse.com的网址是破解它的。这是logcat错误:

 08-05 01:15:12.620: E/WVMExtractor(55): Failed to open libwvm.so
 08-05 01:15:12.620: E/MediaPlayer(875): error (1, -2147483648)

这很难调试,因为显然它对应于这个无用的错误:MediaPlayer.MEDIA_ERROR_UNKNOWN。 (根据这个问题Android MediaPlayer error (1, -2147483648)

任何建议将不胜感激!感谢

1 个答案:

答案 0 :(得分:1)

我改变了从录音中获取字节数据的方式。这是我用的代码:

            File file = new File(mFileName);
                byte[] byteArray = new byte[(int) file.length()];
                try {
                    FileInputStream fileInputStream = new FileInputStream(file);
                    fileInputStream.read(byteArray);
                    for (int i = 0; i < byteArray.length; i++) {
                        System.out.print((char)byteArray[i]);
                    }
                } catch (FileNotFoundException e) {
                   System.out.println("File Not Found.");
                   e.printStackTrace();
                }
                catch (IOException e1) {
                   System.out.println("Error Reading The File.");
                   e1.printStackTrace();
                }

我最后还将我的文件录制为.mp4 这样做需要在我的代码中进行以下更改:

  mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
  mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

我还必须将文件扩展名更改为.mp4而不是.3gpp

它现在有效,但声音有点蹩脚