如何在录音后创建 .wav 文件 - Android Studio
How to create a .wav file after a record - Android Studio
我尝试做一个简单的记录器,当我开始操作时我得到 fileNotFoundException。我如何在特定文件夹中创建一个 .wav 文件,比方说在外部卡上,这样我可以稍后访问该文件夹以收听存储在那里的记录。
到目前为止,这是我的代码,我使用了 library 记录 activity :
public class MainActivity extends Activity {
String filePath;
int color ;
int requestCode = 0;
Button recordButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recordButton = (Button) findViewById(R.id.recordButton);
recordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
filePath = Environment.getExternalStorageDirectory() + "/recorded_audio.wav";
color = getResources().getColor(R.color.colorPrimaryDark);
AndroidAudioRecorder.with(MainActivity.this)
.setFilePath(filePath)
.setColor(color)
.setRequestCode(requestCode)
.record();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
Toast.makeText(MainActivity.this, "Resoult ok", Toast.LENGTH_SHORT).show();
// Great! User has recorded and saved the audio file
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(MainActivity.this, "Resoult not-ok", Toast.LENGTH_SHORT).show();
// Oops! User has canceled the recording
}
}
}
}
答案是我必须在 AndroidMainifers.xml 中添加这些权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Android 有一个内置的微型 phone,您可以通过它捕获音频并存储它,或者在您的 phone 中播放它。有很多方法可以做到这一点,但最常见的方法是通过 MediaRecorder class.
Android 提供 MediaRecorder class 来录制音频或视频。为了使用 MediaRecorder class ,您将首先创建一个 MediaRecorder class 的实例。其语法如下。
MediaRecorder myAudioRecorder = new MediaRecorder();
现在您将设置源、输出和编码格式以及输出文件。它们的语法如下。
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
指定音频源和格式及其输出文件后,我们就可以调用prepare和start这两个基本方法开始录制音频了。
myAudioRecorder.prepare();
myAudioRecorder.start();
在您的代码中只需进行以下更改:-
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";;
myAudioRecorder=new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
}
catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
record.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
}
});
希望对您有所帮助,并将权限也放入您的 android 清单文件中。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
我尝试做一个简单的记录器,当我开始操作时我得到 fileNotFoundException。我如何在特定文件夹中创建一个 .wav 文件,比方说在外部卡上,这样我可以稍后访问该文件夹以收听存储在那里的记录。
到目前为止,这是我的代码,我使用了 library 记录 activity :
public class MainActivity extends Activity {
String filePath;
int color ;
int requestCode = 0;
Button recordButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recordButton = (Button) findViewById(R.id.recordButton);
recordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
filePath = Environment.getExternalStorageDirectory() + "/recorded_audio.wav";
color = getResources().getColor(R.color.colorPrimaryDark);
AndroidAudioRecorder.with(MainActivity.this)
.setFilePath(filePath)
.setColor(color)
.setRequestCode(requestCode)
.record();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
Toast.makeText(MainActivity.this, "Resoult ok", Toast.LENGTH_SHORT).show();
// Great! User has recorded and saved the audio file
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(MainActivity.this, "Resoult not-ok", Toast.LENGTH_SHORT).show();
// Oops! User has canceled the recording
}
}
}
}
答案是我必须在 AndroidMainifers.xml 中添加这些权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Android 有一个内置的微型 phone,您可以通过它捕获音频并存储它,或者在您的 phone 中播放它。有很多方法可以做到这一点,但最常见的方法是通过 MediaRecorder class.
Android 提供 MediaRecorder class 来录制音频或视频。为了使用 MediaRecorder class ,您将首先创建一个 MediaRecorder class 的实例。其语法如下。
MediaRecorder myAudioRecorder = new MediaRecorder();
现在您将设置源、输出和编码格式以及输出文件。它们的语法如下。
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
指定音频源和格式及其输出文件后,我们就可以调用prepare和start这两个基本方法开始录制音频了。
myAudioRecorder.prepare();
myAudioRecorder.start();
在您的代码中只需进行以下更改:-
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";;
myAudioRecorder=new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
}
catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
record.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
}
});
希望对您有所帮助,并将权限也放入您的 android 清单文件中。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />