gpt4 book ai didi

android - Media Recorder录制应用程序音频

转载 作者:行者123 更新时间:2023-12-03 02:16:47 24 4
gpt4 key购买 nike

我的应用程序有几个带有声音的按钮(soundPool),我需要将它们记在闪存卡上,并通过MediaRecorder进行录制,但是当我运行该应用程序,然后打开录音播放并单击“停止录音”时,应用程序崩溃你不告诉我问题是什么?
我希望在recordStop方法中

public class MainActivity extends Activity {


int kickSound;
SoundPool mSoundPool;
AssetManager assets;

private MediaRecorder mediaRecorder;
private MediaPlayer mediaPlayer;
private String fileName;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mSoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
assets = getAssets();

kickSound = loadSound("snare_trap.ogg");

ImageButton kick = (ImageButton)this.findViewById(R.id.imageButton1);
kick.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
playSound(kickSound);
}
return false;
}
});


fileName = Environment.getExternalStorageDirectory() + "/record.3gpp";
}

protected void playSound(int sound) {

if (sound > 0)
mSoundPool.play(sound, 1, 1, 1, 0, 1);
}


private int loadSound(String fileName) {
AssetFileDescriptor afd = null;
try {
afd = assets.openFd(fileName);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Couldn't load file '" + fileName + "'", Toast.LENGTH_SHORT).show();
return -1;
}
return mSoundPool.load(afd, 1);
}


public void recordStart(View v) {
try {
releaseRecorder();

File outFile = new File(fileName);
if (outFile.exists()) {
outFile.delete();
}

mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(AudioManager.STREAM_MUSIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(fileName);
mediaRecorder.prepare();
mediaRecorder.start();
} catch (Exception e) {
e.printStackTrace();
}

}

public void recordStop(View v) {
mediaRecorder.stop();
}


public void playStart(View v) {
try {
releasePlayer();
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(fileName);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}

public void playStop(View v) {
if (mediaPlayer != null) {
mediaPlayer.stop();
}
}

private void releaseRecorder() {
if (mediaRecorder != null) {
mediaRecorder.release();
mediaRecorder = null;
}
}

private void releasePlayer() {

mediaPlayer.release();
mediaPlayer = null;
}


@Override
protected void onDestroy() {
super.onDestroy();
releasePlayer();
releaseRecorder();
}

}

最佳答案

为什么要释放录音机开始?仅当您不想再访问记录器时,才应使用发布。尝试将发行版移至末尾。

关于android - Media Recorder录制应用程序音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19206039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com