當前位置:首頁 » 安卓系統 » android60錄音

android60錄音

發布時間: 2023-03-24 18:07:55

1. 安卓系統手機的錄音存放在哪個文件夾

安卓系統手機的錄音存放在/sdcard/voiceRecoder目錄下,如果是中文系統的話還有可能是在/sdcard/錄音機裡面。

查找方法:在SD卡的目錄下找這兩個文件夾,錄制音頻文件就在裡面的。

1、點擊「錄音WAV文件」,開始錄音。錄音完成後,生成文件/sdcard/FinalAudio.wav

2、點擊「錄音AMR文件」,開始錄音。錄音完成後,生成文件/sdcard/FinalAudio.amr

3、點擊「停止錄音」,停止錄音,並顯示錄音輸出文件以及該文件大小。

2. 用安卓版的唱吧上傳錄音、總是提示錄音必須超過60秒才能上傳、可是我是整首歌唱完的、這是怎麼回事

卸載重裝或關機再試

3. Android手機通話錄音在哪裡找

Android手機通話錄音在哪裡找:

在手機存儲根目錄下,一般都是sounds或者voices內。

一般在SD卡下的「Sounds」里,拿三星的安卓手機為例:

  • 下面的圖片提示錄音已保存



拓展資料:
Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未臘搜有統一中文名稱,中國大陸地區較多人使用「安卓」或襪悄「安致」。Android操作系統最初由告局渣Andy Rubin開發,主要支持手機。

4. Android實現錄音功能

1 Android錄音需要聲明錄音許可權

<uses-permission android:name="android.permission.RECORD_AUDIO" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2.錄音文件要寫到文件夾中,創建文件夾,在Application的onCreate方法中創建文件夾

@Override

public void onCreate() {

    super.onCreate();

    CrashHandler mCrashHandler = CrashHandler.getInstance();

    mCrashHandler.init(getApplicationContext(), getClass());

    initFile();

}

private void initFile() {

    //錄音文件

    File audioFile = new File(Constant.UrlAudio);

    if (!audioFile.exists()) {

        audioFile.mkdirs();

    } else if (!audioFile.isDirectory()) {

        audioFile.delete();

        audioFile.mkdirs();

    }

    //拍攝圖片文件

    File imageFile = new File(Constant.UrlImage);

    if (!imageFile.exists()) {

        imageFile.mkdirs();

    } else if (!imageFile.isDirectory()) {

        imageFile.delete();

        imageFile.mkdirs();

    }

}

Constant.UrlImage是個靜態的文件路徑

//錄音文件

public static String UrlAudio = FileUtil.getSdcardPathOnSys()+"/EhmFile/media/audio/";

3.在activity中開始錄音

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.media.MediaRecorder;

import android.text.format.DateFormat;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import java.io.File;

import java.io.IOException;

import java.util.Calendar;

import java.util.Locale;

public class Record2Activity extends AppCompatActivity {

    // 錄音界面相關

    Button btnStart;

    Button btnStop;

    TextView textTime;

    // 錄音功能相關

    MediaRecorder mMediaRecorder; // MediaRecorder 實例

    boolean isRecording; // 錄音狀態

    String fileName; // 錄音文件的名稱

    String filePath; // 錄音文件存儲路徑

    Thread timeThread; // 記錄錄音時長的線程

    int timeCount; // 錄音時長 計數

    final int TIME_COUNT = 0x101;

    // 錄音文件存放目錄

    final String audioSaveDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audiodemo/";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_record2);

        btnStart = (Button) findViewById(R.id.btn_start);

        btnStop = (Button) findViewById(R.id.btn_stop);

        textTime = (TextView) findViewById(R.id.text_time);

        btnStart.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

// 開始錄音

                btnStart.setEnabled(false);

                btnStop.setEnabled(true);

                startRecord();

                isRecording = true;

// 初始化錄音時長記錄

                timeThread = new Thread(new Runnable() {

                    @Override

                    public void run() {

                        countTime();

                    }

                });

                timeThread.start();

            }

        });

        btnStop.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

// 停止錄音

                btnStart.setEnabled(true);

                btnStop.setEnabled(false);

                stopRecord();

                isRecording = false;

            }

        });

    }

    // 記錄錄音時長

    private void countTime() {

        while (isRecording) {

            Log.d("mediaRe","正在錄音");

            timeCount++;

            Message msg = Message.obtain();

            msg.what = TIME_COUNT;

            msg.obj = timeCount;

            myHandler.sendMessage(msg);

            try {

                timeThread.sleep(1000);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

        Log.d("mediaRec", "結束錄音");

        timeCount = 0;

        Message msg = Message.obtain();

        msg.what = TIME_COUNT;

        msg.obj = timeCount;

        myHandler.sendMessage(msg);

    }

    /**

    * 開始錄音 使用amr格式

    * 錄音文件

    *

    * @return

    */

    public void startRecord() {

// 開始錄音

        /* ①Initial:實例化MediaRecorder對象 */

        if (mMediaRecorder == null)

            mMediaRecorder = new MediaRecorder();

        try {

            /* ②setAudioSource/setVedioSource */

            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設置麥克風

            /*

            * ②設置輸出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式

            * ,H263視頻/ARM音頻編碼)、MPEG-4、RAW_AMR(只支持音頻且音頻編碼要求為AMR_NB)

            */

            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

            /* ②設置音頻文件的編碼:AAC/AMR_NB/AMR_MB/Default 聲音的(波形)的采樣 */

            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

            fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";

            //注意文件夾要創建之後才能使用

            filePath = Constant.UrlAudio + fileName;

            /* ③准備 */

            mMediaRecorder.setOutputFile(filePath);

            mMediaRecorder.prepare();

            /* ④開始 */

            mMediaRecorder.start();

        } catch (IllegalStateException e) {

            Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());

        } catch (IOException e) {

            e.printStackTrace();

            Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());

        }

    }

    /**

    * 停止錄音

    */

    public void stopRecord() {

//有一些網友反應在5.0以上在調用stop的時候會報錯,翻閱了一下谷歌文檔發現上面確實寫的有可能會報錯的情況,捕獲異常清理一下就行了,感謝大家反饋!

        try {

            mMediaRecorder.stop();

            mMediaRecorder.release();

            mMediaRecorder = null;

            filePath = "";

        } catch (RuntimeException e) {

            Log.e("mediaR", e.toString());

            mMediaRecorder.reset();

            mMediaRecorder.release();

            mMediaRecorder = null;

            File file = new File(filePath);

            if (file.exists())

                file.delete();

            filePath = "";

        }

    }

    // 格式化 錄音時長為 秒

    public static String FormatMiss(int miss) {

        return "" + miss;

    }

    Handler myHandler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

            switch (msg.what) {

                case TIME_COUNT:

                    int count = (int) msg.obj;

                    Log.d("meidaRe","count == " + count);

                    textTime.setText(FormatMiss(count));

                    break;

            }

        }

    };

    @Override

    protected void onDestroy() {

        super.onDestroy();

        myHandler.removeCallbacksAndMessages(null);

    }

}

布局文件很簡單

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".Record2Activity">

    <Button

        android:id="@+id/btn_stop"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="結束"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.5"

        app:layout_constraintStart_toEndOf="@+id/btn_start"

        app:layout_constraintTop_toTopOf="parent" />

    <Button

        android:id="@+id/btn_start"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="開始"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toStartOf="@+id/btn_stop"

        app:layout_constraintHorizontal_bias="0.5"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent" />

    <TextView

        android:id="@+id/text_time"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginStart="11dp"

        android:layout_marginTop="47dp"

        android:text="時間"

        app:layout_constraintStart_toStartOf="@+id/btn_start"

        app:layout_constraintTop_toBottomOf="@+id/btn_start" />

</androidx.constraintlayout.widget.ConstraintLayout>

這樣就可以使用錄音功能了

5. 如何使Android錄音實現內錄功能

之前在做直播的時候需要使用到內錄功能,比如經常看到游戲主播在直播玩游戲,游戲的聲音不是通過MIC錄制的,而是內錄完成的。故在此記錄一下。

相信大家都很熟悉Android如果錄音的了:

int frequency = 44100; int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; int minBufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding); int audioSource = MediaRecorder.AudioSource.MIC;
AudioRecord audioRecord = new AudioRecord(audioSource, frequency,
channelConfiguration, audioEncoding, minBufferSize);
audioRecord.startRecording();
...

AudioSource輸入源介紹

項目

介紹

許可權

DEFAULT 默認。在源碼 system/media/audio/include/system/audio.h配置默認項 無

MIC 麥克風 無

VOICE_UPLINK 電話錄音上行線路 android.permission.CAPTURE_AUDIO_OUTPUT,系統許可權不允許第三方app使用

VOICE_DOWNLINK 電話錄音下行線路 android.permission.CAPTURE_AUDIO_OUTPUT,系統許可權不允許第三方app使用

VOICE_CALL 電話錄音上下線路 android.permission.CAPTURE_AUDIO_OUTPUT,系統許可權不允許第三方app使用

CAMCORDER 攝像頭的麥克風 無

VOICE_RECOGNITION 語音識別 無

VOICE_COMMUNICATION 網路電話 無

REMOTE_SUBMIX 傳輸到遠程的音頻混合流。默認情況下如何用該項錄音,本地揚聲器或者耳機的聲音將會被截走 android.permission.CAPTURE_AUDIO_OUTPUT,系統許可權不允許第三方app使用

好了,現在我們知道了REMOTE_SUBMIX可以實現內錄功能了。有兩點比較麻煩:

  • 需要系統許可權

  • 會截走揚聲器和耳機的聲音,也就是說再錄音時本地無法播放聲音

  • 系統許可權問題

    這個對我來說比較好辦,因為我是直接在android設備板子上開發,可以直接使用系統簽名編譯。首先在AndroidManifest.xml添加
    android:sharedUserId="android.uid.system"
    其次,

    第一種方法:

    adb shell 執行:
    signapk.jar platform.x509.pem platform.pk8 app-unsigned.apk signed.apk
    adb push signed.apk /system/app

    第二種方法:

    編寫Android.mk : 設置簽名為platform

  • LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)

  • LOCAL_MODULE_TAGS := optional

  • LOCAL_SRC_FILES := $(call all-java-files-under, src)

  • LOCAL_PACKAGE_NAME := YourApp

  • LOCAL_CERTIFICATE := platform

  • LOCAL_PROGUARD_FLAG_FILES := proguard.flagsinclude $(BUILD_PACKAGE)include $(call all-makefiles-under,$(LOCAL_PATH))

  • 截走揚聲器和耳機的聲音問題

    修改framework下av/services/audiopolicy/AudioPolicyManager.cpp

  • audio_devices_t AudioPolicyManager::getDeviceForStrategy(routing_strategy strategy, bool fromCache)

  • getDeviceForStrategy方法下找到

  • if (mAvailableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0")) != 0) { device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;

  • }

  • 修改為

  • if (mAvailableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0")) != 0) { device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_REMOTE_SUBMIX; device2 |= (availableOutputDeviceTypes & AUDIO_DEVICE_OUT_WIRED_HEADPHONE); device2 |= (availableOutputDeviceTypes & AUDIO_DEVICE_OUT_SPEAKER);

  • }

  • 意思是聲音輸出的設備添加了耳機和揚聲器,這里可根據實際情況設置。
    至此,將最開始的錄音代碼

  • int audioSource = MediaRecorder.AudioSource.MIC;

  • 改成

  • int audioSource = MediaRecorder.AudioSource.REMOTE_SUBMIX;

  • 就可以實現內錄功能了。
    <br/>

    ps:

    在不修改源碼的情況下,第三方app目前暫不知如何實現內錄。

    延伸閱讀

    5.0以後請求Android錄屏默認會彈出確認框,但在系統app下請求就不會彈出了(具體可以去看源碼)。這也是為了谷歌為了安全考慮。
    不過5.0的時候這個彈框卻是一個大漏洞,被國內360發現了,給你們鏈接^_^
    Android 5.0屏幕錄制漏洞

6. Android 開發 如何實現高質量的錄音

在移動APP開發中,每逢APP應用設計到多媒體開發的時候,都會讓很多的程序員頭疼不已,而且項目的開發進度會放慢、項目
的難度也會加大蠻多,同時APP的測試也會增加。Android中的多媒體開發,有音頻的播放、音頻的錄制、視頻的播放、視頻的錄制
等,雖然Android的SDK中提供了一些基礎的開發API類,如音頻的錄制就提供了兩種方式:AudioRecord錄制音頻和MediaRecorder錄
制音頻。AudioRecord類相對於MediaRecorder來說,更加接近底層,為我們封裝的方法也更少。然而實現一個AudioRecord的音頻錄
製程序也很簡單。
一、AudioRecord實現錄制音頻:
package com.hb56.MyAndroidUtil;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.hardware.Camera.AutoFocusCallback;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
* 該實例中,我們使用AudioRecord類來完成我們的音頻錄製程序
* AudioRecord類,我們可以使用三種不同的read方法來完成錄制工作,
* 每種方法都有其實用的場合
* 一、實例化一個AudioRecord類我們需要傳入幾種參數
* 1、AudioSource:這里可以是MediaRecorder.AudioSource.MIC
* 2、SampleRateInHz:錄制頻率,可以為8000hz或者11025hz等,不同的硬體設備這個值不同
* 3、ChannelConfig:錄制通道,可以為AudioFormat.CHANNEL_CONFIGURATION_MONO和AudioFormat.CHANNEL_CONFIGURATION_STEREO
* 4、AudioFormat:錄制編碼格式,可以為AudioFormat.ENCODING_16BIT和8BIT,其中16BIT的模擬性比8BIT好,但是需要消耗更多的電量和存儲空間
* 5、BufferSize:錄制緩沖大小:可以通過getMinBufferSize來獲取
* 這樣我們就可以實例化一個AudioRecord對象了
* 二、創建一個文件,用於保存錄制的內容
* 同上篇
* 三、打開一個輸出流,指向創建的文件
* DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)))
* 四、現在就可以開始錄制了,我們需要創建一個位元組數組來存儲從AudioRecorder中返回的音頻數據,但是
* 注意,我們定義的數組要小於定義AudioRecord時指定的那個BufferSize
* short[]buffer = new short[BufferSize/4];
* startRecording();
* 然後一個循環,調用AudioRecord的read方法實現讀取
* 另外使用MediaPlayer是無法播放使用AudioRecord錄制的音頻的,為了實現播放,我們需要
* 使用AudioTrack類來實現
* AudioTrack類允許我們播放原始的音頻數據
*
*
* 一、實例化一個AudioTrack同樣要傳入幾個參數
* 1、StreamType:在AudioManager中有幾個常量,其中一個是STREAM_MUSIC;
* 2、SampleRateInHz:最好和AudioRecord使用的是同一個值
* 3、ChannelConfig:同上
* 4、AudioFormat:同上
* 5、BufferSize:通過AudioTrack的靜態方法getMinBufferSize來獲取
* 6、Mode:可以是AudioTrack.MODE_STREAM和MODE_STATIC,關於這兩種不同之處,可以查閱文檔
* 二、打開一個輸入流,指向剛剛錄制內容保存的文件,然後開始播放,邊讀取邊播放
*
* 實現時,音頻的錄制和播放分別使用兩個AsyncTask來完成
*/
/**
* 利用AudioRecord類實現自己的音頻錄製程序
* com.hb56.MyAndroidUtil.AudioRecord
*
* @author Admin-zhangyx
*
* create at 2014-10-16 下午2:03:13
*/
public class AudioRecordActivity extends Activity{
private TextView stateView;
private Button btnStart, btnStop, btnPlay, btnFinish;
private RecordTask recorder;
private PlayTask player;
private File audioFile;
private boolean isRecording = true, isPlaying = false; // 標記
private int frequence = 8000; // 錄制頻率,單位hz.這里的值注意了,寫的不好,可能實例化AudioRecord對象的時候,會出錯。我開始寫成11025就不行。這取決於硬體設備
private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_audio_record);
stateView = (TextView) this.findViewById(R.id.view_state);
stateView.setText("准備開始");
btnStart = (Button) this.findViewById(R.id.btn_start);
btnStop = (Button) this.findViewById(R.id.btn_stop);
btnPlay = (Button) this.findViewById(R.id.btn_play);
btnFinish = (Button) this.findViewById(R.id.btn_finish);
btnFinish.setText("停止播放");
btnStop.setEnabled(false);
btnPlay.setEnabled(false);
btnFinish.setEnabled(false);

// 在這里我們創建一個文件,用於保存錄制內容
File fpath = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/data/files/");
fpath.mkdirs();// 創建文件夾
try {
// 創建臨時文件,注意這里的格式為.pcm
audioFile = File.createTempFile("recording", ".pcm", fpath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_start:
// 開始錄制

// 這里啟動錄制任務
recorder = new RecordTask();
recorder.execute();

break;
case R.id.btn_stop:
// 停止錄制
this.isRecording = false;
// 更新狀態
// 在錄制完成時設置,在RecordTask的onPostExecute中完成
break;
case R.id.btn_play:

player = new PlayTask();
player.execute();
break;

http://www.2cto.com/kf/201503/382894.html

7. 安卓手機怎麼設置通話錄音

點擊安卓手機的電話圖標,打開撥號界面點擊右下角的三個點的圖標,然後點擊設置,在設置界面,下拉點擊通話自動錄音在通話自動錄音界面,激活話筒自動錄音按鈕。

熱點內容
安卓手機哪個處理器是最好的 發布:2025-05-14 05:40:23 瀏覽:529
java語言實現 發布:2025-05-14 05:34:43 瀏覽:234
數控系統主軸配置參數有哪些 發布:2025-05-14 05:25:55 瀏覽:819
二級緩存微服務 發布:2025-05-14 05:13:55 瀏覽:101
sqlserverwhencase 發布:2025-05-14 05:11:35 瀏覽:434
安卓odd是什麼意思 發布:2025-05-14 04:49:57 瀏覽:921
安卓哪個app能查詢航班 發布:2025-05-14 04:49:04 瀏覽:558
linux定時shell腳本 發布:2025-05-14 04:49:00 瀏覽:684
審計需要什麼配置 發布:2025-05-14 04:48:55 瀏覽:550
安卓軟體為什麼經常自啟動 發布:2025-05-14 04:38:17 瀏覽:160