java - 通过 Android 应用程序将音频文件上传到 Parse.com 时遇到问题

标签 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); } 

然后,我播放声音。我知道这部分是正确的,因为如果我用“http://www.pocketjourney.com/downloads/pj/tutorials/audio.mp3 ”替换audioFileURL,它就可以正常工作。 是 Parse.com URL 破坏了它。这是 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))

如有任何建议,我们将不胜感激!谢谢

最佳答案

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

            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

现在可以用了,但是声音有点糟糕

关于java - 通过 Android 应用程序将音频文件上传到 Parse.com 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25131656/

相关文章:

java - 如何在HBase协处理器中进行拦截扫描

java - 期待 EOF,发现 'for' - 处理中

java - NetBeans 不喜欢 lib-src 中的库

java - 如何阻止 JSplitPanes 跳转到其默认位置

android - 如何在android中的其他两个 View 之间垂直放置一个 View ?

android - 从全屏 Activity 移动到非全屏 Activity 时,工具栏和状态栏发生碰撞

android - 初始化数据库时如何显示启动画面?

android - Android-更改设备时录制的音频文件大小不同

python - 如何将 Librosa 光谱图保存为特定大小的图像?

audio - 在audibook中为字幕创建时间戳