在我的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))
任何建议将不胜感激!感谢
答案 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
它现在有效,但声音有点蹩脚