【问题标题】:Play android Recorded file into PC将android录制的文件播放到PC
【发布时间】:2011-11-21 09:25:53
【问题描述】:

我正在使用下面的代码来录制声音。

但是,当我在 pc 中播放录制的文件时。没有音乐播放器可以播放。在手机上玩得很好。

任何人都可以说我如何在台式机或笔记本电脑上播放 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();
        }
    }


}

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我想我在你告诉它使用 3gp 编解码器录制音频的代码中看到了你的问题

    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    

    但是您使用 .wav 扩展名,这会使计算机认为您使用不同的编解码器来记录文件(波形编解码器)我确实认为手机忽略了文件扩展名,而是检查文件元数据以获取实际使用的编解码器,这就是手机可以播放它的原因。

    因此,要么您必须更改输出格式以使用 wave,要么更好的想法(因为即使是 wave 格式的短声音剪辑也具有巨大的文件大小)将文件扩展名更改为 3gp,这样会有所帮助

    String FILENAME="/compare1.3gp";
    

    现在,如果您没有可以播放该格式的媒体播放器,您必须购买一个,我相信 VLC 播放器可以做到,而且这是一个免费程序

    现在更详细地描述正在发生的事情: 编解码器就像一门语言,因为它是一组规则,定义了用于表示声音的符号和模式,就像语言使用单词和单词模式(如句子或段落)来传达一个人想要表达的内容. 打个比方,

    您的手机用英语编写声音文件,然后在封面上写着这本书是用希腊语写的。现在您将文件提供给计算机。计算机知道希腊语,这就是封面所说的使用,所以去阅读就好像它在哪里一样,但是因为希腊语和英语在写出来时根本不相似。它所看到的只是看起来像胡言乱语的东西,它没有建立联系文件可能使用不同的语言它严格按照封面上的内容进行,并且发现的不是希腊语,因此无法阅读。另一方面,您的手机会查看有关文件的信息,在那里它可以看到作者在编写文件时使用的是英语,因此手机会像使用英语一样读取文件,因为它的内容很完美感觉手机和 vola 能够播放音乐,因为它可以理解如何重现音乐的说明。

    【讨论】:

      【解决方案2】:

      你的输出文件名是什么 .. 类似 compare1.wav.3gp ?重命名为 compare.3gp

      你在电脑上用的是什么? VLC 应该能够播放您的文件。我不认为这个问题与Android的录音有关,而可能是PC-not-being-able-to-play-3gp之类的问题

      【讨论】:

        【解决方案3】:

        我使用 Android 指南中的代码,但遇到了同样的问题。 我已经通过使用另一个音频编码器解决了这个问题:

        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多