将Android录制的文件播放到PC中

时间:2011-11-21 09:25:54

标签: android android-2.2-froyo android-sdk-2.1

我使用下面的代码录制语音。

但是,当我在电脑中播放录制的文件时。没有音乐播放器可以播放。而在手机中它的表现非常好。

任何人都可以说我怎样才能在桌面或笔记本电脑上播放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();
        }
    }


}

谢谢。

3 个答案:

答案 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);

希望得到这个帮助。