2011-10-31 63 views
1

我正在尝试使用Android模拟器录制声音。我知道这个问题在互联网上很流行,我查了很多帖子,似乎只有一个人成功了:Can the Android emulator record and play back audio using pc hardware?。 (它认为他使用无法在Android模拟器上使用MediaRecorder。存储位置是否错误?

文件fTmFile;与其使用字符串fTmpFile;

,我也尝试过)。并遵循菲利普的建议和官方网站教程http://developer.android.com/guide/topics/media/audio-capture.html以及其他资源,我仍然无法录制。我的应用程序在行抛出异常:

fMediaRecorder.prepare(); 

更exactley,这是我第一次获得:

W/System.err的(1042):java.io.FileNotFoundException:到/ mnt/SD卡/ audiorecordtest.3gp(拒绝)

这让我觉得是有毛病的存储位置,因为即使我加了“SD卡支持”属性,以大小为256的MIB模拟器,我无法存取权限它,此外,我可以在模拟器中看到消息:“你的手机没有SD卡插入“当我去音乐。

我在AndroidManifest.xml中同时添加了音频记录和外部存储权限,并将音频(录制+回放)硬件设置添加到Win 7上的模拟器2.3.3。我的应用程序中存在任何错误,文件或其他东西?请,如果有人有任何想法随时分享,它将不胜感激。

下面是完整的源代码:

import java.io.File; 
import java.io.FileDescriptor; 
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.Toast; 

public class RecordSoundActivity extends Activity { 

    private MediaRecorder fMediaRecorder = null; 
    private Button btnrecord; 
    private Button btnstop; 
    String fTmpFile; 

    public RecordSoundActivity() { 

    fTmpFile = Environment.getExternalStorageDirectory().getPath(); 
    fTmpFile += "/audiorecordtest.3gp"; 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    btnrecord = (Button) findViewById(R.id.button1); 
    btnstop = (Button) findViewById(R.id.button2); 

    btnrecord.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Toast.makeText(RecordSoundActivity.this, "Recording...", Toast.LENGTH_LONG).show(); 
     Recording(); 
     } 
    }); 

    btnstop.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
     fMediaRecorder.stop(); 
     fMediaRecorder.release(); 
     } 
    }); 
    } 

    public void Recording() { 
    fMediaRecorder = new MediaRecorder(); 
    fMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    fMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    fMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

    fMediaRecorder.setAudioChannels(1); 
    fMediaRecorder.setAudioSamplingRate(8000); 

    fMediaRecorder.setOutputFile(fTmpFile); 

    try { 
     fMediaRecorder.prepare(); 
    } catch (IOException e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 
    try { 
     fMediaRecorder.start(); 
    } catch (IllegalStateException e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 

    //fMediaRecorder.stop(); 
    //fMediaRecorder.release(); 
    } 
} 

回答

0

尝试,看看它是否适用于Android 4.0的。我知道我在模拟器中有一些问题,比较低版本(低于4.0),它只是无法识别我的笔记本电脑摄像头。但当我在4.0上试用时,当AVD加载弹出消息时,问我是否要将网络摄像头连接到AVD,并且一旦我同意它的工作。

在SO的另一张海报也问过这个问题,关于相机,并将AVD版本更改为4.0确实对他有帮助。

对于录音也可能是相同的,因为它们都是典型PC的外部硬件。

+0

谢谢,但我的4.0Android模拟器不工作,我不知道为什么,我已经更新SDK,但是当我尝试启动它时,崩溃。有必要更新Eclipse以使用Android模拟器4? – AlexAndro

+0

是的,您需要更新ADT。转到Eclipse,选择菜单“帮助”并选择“检查更新”,然后更新ADT。 – Jong

+0

SDK已完全更新,安装了所有Android4.0功能,没有更新可用,但它仍然有奇怪的行为。我仍在等待人们的回应,看看存储位置是否有任何问题。谢谢。 – AlexAndro

相关问题