我使用下面的代码录制语音。
但是,当我在电脑中播放录制的文件时。没有音乐播放器可以播放。而在手机中它的表现非常好。
任何人都可以说我怎样才能在桌面或笔记本电脑上播放Android录制的文件。
我正在使用的代码。
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
public class AudioRecorder extends Activity {
AudioRecorder ar;
String FILENAME="/compare1.wav";
final MediaRecorder recorder = new MediaRecorder();
String path;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
try{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d("GPS","kartik");
LinearLayout layout=new LinearLayout(this);
Button btnStart = new Button(this);
Button btnStop=new Button(this);
btnStart.setText("START");
btnStop.setText("STOP");
btnStart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
GetPath(FILENAME);
start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
stop();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
layout.addView(btnStart);
layout.addView(btnStop);
setContentView(layout);
}catch (Exception e) {
e.printStackTrace();
}
}
public String GetPath(String path) {
return this.path = sanitizePath(path);
}
private String sanitizePath(String path) {
if (!path.startsWith("/")) {
path = "/" + path;
}
if (!path.contains(".")) {
path += ".3gp";
}
return Environment.getExternalStorageDirectory().getAbsolutePath() + path;
}
/**
* Starts a new recording.
*/
public void start() throws IOException {
try{
String state = android.os.Environment.getExternalStorageState();
if(!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
throw new IOException("SD Card is not mounted. It is " + state + ".");
}
// make sure the directory we plan to store the recording in exists
File directory = new File(path).getParentFile();
if (!directory.exists() && !directory.mkdirs()) {
throw new IOException("Path to file could not be created.");
}
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* Stops a recording that has been previously started.
*/
public void stop() throws IOException {
try{
recorder.stop();
recorder.release();
}catch (Exception e) {
e.printStackTrace();
}
}
}
谢谢。
答案 0 :(得分:1)
我想我在你的代码中看到你的问题,你告诉它使用3gp Codec记录音频
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
但你使用.wav扩展名这将使计算机认为你使用不同的编解码器来记录文件(wave codec)我相信手机忽略了文件扩展名,而是检查文件元数据以获得使用的实际编解码器,这就是手机可以播放的原因。
因此,您必须更改输出格式以使用wave或更好的构思(因为即使是波形格式的短声音片段具有巨大的文件大小)也会将文件扩展名更改为3gp,因此这将有助于
String FILENAME="/compare1.3gp";
现在,如果你没有可以播放该格式的媒体播放器,你必须得到一个,我相信VLC播放器可以做到这一点,这是一个免费的节目
现在更详细地描述正在发生的事情: 编解码器就像一种语言,因为它是一组规则,用于定义用于表示声音的符号和模式,就像语言使用单词和单词模式(如句子或段落)来表达一个人试图说出的内容。 所以打个比方,
你的手机用英文写声音文件,然后在封面上说这本书用希腊语写成。现在您将文件提供给计算机。计算机知道希腊文,这就是封面所说的内容,所以阅读时认为它好像在哪里,但由于希腊语和英语在写出时根本不相似。所有它看起来像是乱码,它不会使文件的连接可能是一个不同的语言,它严格按照封面上的内容和它发现的不是希腊语,所以它无法读取它。另一方面,你的手机会查看有关该文件的信息,并且在那里它可以看到作者在编写时使用英语,因此手机会像阅读英文一样阅读文件,因为内容是完美的感觉电话和它能够播放音乐,因为它可以理解如何重现音乐的说明。
答案 1 :(得分:0)
您的输出文件名是什么.. compare1.wav.3gp
之类的内容?将其重命名为compare.3gp
你还在PC上使用什么? VLC应该能够播放您的文件。我不认为这个问题与Android的录音有关,相反它可能是PC无法播放3gp的问题
答案 2 :(得分:0)
我使用Android指南中的代码,我遇到了同样的问题。 我通过使用另一个音频编码器解决了这个问题:
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
希望得到这个帮助。