android怎样录制系统内部声音

 我来答
百度网友ded4135
高粉答主

2018-01-31 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.7万
采纳率:87%
帮助的人:1.2亿
展开全部

通过API 19新加的MediaRecorder.AudioSource.REMOTE_SUBMIX参数可以让系统App录制系统内置的声音,也就是扬声器的声音。下面是一个巨简单的例子来示例如何通过AudioRecord配合REMOTE_SUBMIX参数进行录制。

1. 编译apk

MainActivity.java:

  • package com.example.audiotest;  

  • import java.io.FileOutputStream;  

  • import java.io.IOException;  

  • import android.app.Activity;  

  • import android.media.AudioFormat;  

  • import android.media.AudioRecord;  

  • import android.media.MediaRecorder;  

  • import android.os.Bundle;  

  • import android.util.Log;  

  • import android.view.View;  

  • import android.widget.Button;  

  • public class MainActivity extends Activity {  

  • private static String TAG = "JZJ";  

  • AudioRecord mRecord = null;  

  • boolean mReqStop = false;  

  • @Override  

  • protected void onCreate(Bundle savedInstanceState) {  

  • super.onCreate(savedInstanceState);  

  • setContentView(R.layout.activity_main);  

  • init();  

  • (new Thread() {  

  • @Override  

  • public void run() {  

  • recordAndPlay();  

  • }  

  • }).start();  

  • }  

  • private final int kSampleRate = 44100;  

  • private final int kChannelMode = AudioFormat.CHANNEL_IN_STEREO;  

  • private final int kEncodeFormat = AudioFormat.ENCODING_PCM_16BIT;  

  • private void init() {  

  • int minBufferSize = AudioRecord.getMinBufferSize(kSampleRate, kChannelMode,  

  • kEncodeFormat);  

  • mRecord = new AudioRecord(MediaRecorder.AudioSource.REMOTE_SUBMIX,  

  • kSampleRate, kChannelMode, kEncodeFormat, minBufferSize * 2);  

  • }  

  • private final int kFrameSize = 2048;  

  • private String filePath = "/sdcard/voice.pcm";  

  • private void recordAndPlay() {  

  • FileOutputStream os = null;  

  • mRecord.startRecording();  

  • try {  

  • os = new FileOutputStream(filePath);  

  • byte[] buffer = new byte[kFrameSize];  

  • int num = 0;  

  • while (!mReqStop) {  

  • num = mRecord.read(buffer, 0, kFrameSize);  

  • Log.d(TAG, "buffer = " + buffer.toString() + ", num = " + num);  

  • os.write(buffer, 0, num);  

  • }  

  • Log.d(TAG, "exit loop");  

  • os.close();  

  • } catch (IOException e) {  

  • e.printStackTrace();  

  • Log.e(TAG, "Dump PCM to file failed");  

  • }  

  • mRecord.stop();  

  • mRecord.release();  

  • mRecord = null;  

  • Log.d(TAG, "clean up");  

  • }  

  • public void stop(View view) {  

  • mReqStop = true;  

  • Button stopBtn = (Button) findViewById(R.id.stopBtn);  

  • stopBtn.setText("Stopped");  

  • stopBtn.setEnabled(false);  

  • }  

  • }  

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牟梓颖7d
2019-11-08
知道答主
回答量:42
采纳率:0%
帮助的人:2.6万
展开全部
可以加个插头,找一下:安卓系统内录配件,就只录内部声音,没有外音了,在淘宝上找一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式