当前位置: 首页 > 知识库问答 >
问题:

录制用户语音android

瞿宏儒
2023-03-14

我正在尝试制作一个应用程序,它应该首先记录用户的声音,然后从记录的文件中计算不同的东西(例如频谱)。我无法播放录制的文件(我找不到该文件-它甚至可以录制吗?)。这是我的代码:

package com.example.annik.puhesovellus;

import android.media.MediaPlayer; 
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import java.io.File;
import java.io.IOException;


public class DisplayAanitysIkkuna extends AppCompatActivity {
private String mFileName;
private MediaRecorder mRecorder;
private MediaPlayer mPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_aanitys_ikkuna);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    mFileName = Environment.getExternalStorageDirectory()+"/audiorecorder.3gpp";

}
public void ButtonTapped(View view) {
    switch(view.getId()) {
        case R.id.start:
            try {
                beginRecording();
            }catch(Exception e){
                e.printStackTrace();
            }
            break;
        case R.id.stop:
            try {
                stopRecording();
            }catch(Exception e) {
                e.printStackTrace();
            }
            break;
        case R.id.play:
            try {
                playRecording();
            }catch(Exception e) {
                e.printStackTrace();
            }
            break;
        case R.id.stopPlaying:
            try {
                stopPlaying();
            }catch(Exception e) {
                e.printStackTrace();
            }
            break;

    }

}

private void stopPlaying() {
    mPlayer.release();
    mPlayer = null;
}

private void playRecording() throws Exception{
    ditchMediaPlayer();
    MediaPlayer mPlayer = MediaPlayer.create(this, Uri.parse(mFileName));
    mPlayer.start();

}

private void ditchMediaPlayer() {
    if(mPlayer != null) {
        try {
            mPlayer.release();
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

private void beginRecording() throws IOException {
    ditchMediaRecorder();
    File outFile = new File(mFileName);

    if(outFile.exists()) {
        outFile.delete();
    }

    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mRecorder.setOutputFile(mFileName);
    mRecorder.prepare();
    mRecorder.start();
}

private void ditchMediaRecorder() {
    if(mRecorder != null) {
        mRecorder.release();

    }
}

private void stopRecording() {
    if(mRecorder != null) {
        mRecorder.stop();
    }

}


}

我知道缩进不正确,因为我把代码粘贴得很糟糕……你知道为什么这段代码不能工作吗?它给出了两个错误:“应该已经设置了字幕控制器”,但我读到我不需要介意,“QCMediaPlayer媒体播放器不存在”,我读到这意味着我的平台不支持QCMedia播放器。。?这段代码是记录了一个文件却不能播放,还是无法记录文件?如何录制用户语音并处理保存的文件?

共有1个答案

罗波鸿
2023-03-14

我认为问题出在playRecording()中。当您键入MediaPlayer mPlayer=…时,它会在该方法中创建一个带有范围的新变量。您没有使用您的类MediaPlayer变量。尝试更改

MediaPlayer mPlayer = MediaPlayer.create(this, Uri.parse(mFileName));

mPlayer = MediaPlayer.create(this, Uri.parse(mFileName));
 类似资料:
  • 为了方便的确认麦克风和ref的问题,或者配合算法来调试,需要抓取声音 8008 可以配置为标准的 usb 声卡,在 linux 上识别为一个 uac 设备, linux 可以通过 usb 声卡进行声音的采集和声音的播放,录制的格式是单声道, 16K , 16bit 8008 编译的固件需要支持 usb 声卡模式

  • 更新时间:2018-09-17 11:39:47 功能说明 录音语音模块驱动程序。该模块是 10s 录音的语音模块,能进行高质量语音还原。 硬件资源 1.ESP32 开发板 2.ISD1820 模块 3.接线 isd1820 模块 REC 引脚接 ESP32 19 引脚 isd1820 模块 P-E 引脚接 ESP32 18 引脚 isd1820 模块 VCC 引脚接 ESP32 VCC 引脚 i

  • 我正在开发一个功能,当按下一个按钮时,它将启动语音识别,同时将记录用户所说的话。代码如下: 我一步一步地制作了这个应用程序,起初这个应用程序没有录音功能,语音识别效果非常好。 在我多次测试并认为语音识别正常后,我开始使用合并录音功能。 然后,我进行了测试,一旦按下按钮\u start,甚至在我试图说话之前,就会立即出现ERROR3音频信息。 我播放录音。语音也被正确记录和保存。 发生什么事了?为什

  • 我正在开发一个语音识别应用程序,用户会在其中说一句话或任何东西,然后将其转换为文本......(语音到文本的转换通过谷歌进行) 我的问题是,,,当这个人说话时,保存或记录他的声音(语音)的文件/缓冲区在哪里?(在谷歌收购并转换之前) 并且是否可以持有此文件或缓冲区?

  • 我在设计一个可以同时录制语音和将语音转换为文本的应用程序时遇到了这个bug。我使用Google API进行语音识别部分,并使用audioRecorder对象进行录音。它没有成功,因此我转而使用onBufferReceived()来检索过程中的字节(当用户说话时)。Google API代码现在是我代码的onResults()部分,它可以在没有UI的情况下进行语音识别。 这是代码

  • fn fn 待测