Articles of audiorecord

需要一个简单的录音例子

我需要在Android中使用AudioRecorder进行简单的录音和播放示例。 我尝试使用MediaRecorder,它工作正常。

AudioRecord:start()状态-38

我有以下问题:我使用SpeechRecognizer来识别几个单词。 我用 public void onResults 销毁SpeechRecognizer的方法。 在破坏之后我初始化AudioRecord并从麦克风开始录音。 这会导致我的logcat出现以下错误: 12-09 00:44:01.976: E/AudioRecord(21185): start() status -38 我的代码中没有抛出exception。 AudioRecord无法正常启动。 我假设SpeechRecognizer没有足够快地释放麦克风,因为如果我在AudioRecord的初始化之前添加Thread.sleep(200),我不会遇到这个问题。 由于显而易见的原因,这种解决方案很糟 因此,我有以下问题: 如何检查AudioRecord是否已正确初始化? (我的代码中没有exception。) _audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED 也是假的。 或者我如何检查SpeechRecognizer是否正确释放麦克风? 非常感谢!

在Android上使用AudioRecord和MediaCodec编码AAC音频

我正在尝试使用Android AudioRecord和MediaCodec对aac音频进行编码。 我创建了一个非常类似的编码器类( 使用Android MediaCodec从相机编码H.264 )。 在这个类中,我创建了一个AudioRecord实例,并告诉它将其byte []数据读出到AudioEncoder(audioEncoder.offerEncoder(Data))。 while(isRecording) { audioRecord.read(Data, 0, Data.length); audioEncoder.offerEncoder(Data); } 这是我的AudioRecord设置 int audioSource = MediaRecorder.AudioSource.MIC; int sampleRateInHz = 44100; int channelConfig = AudioFormat.CHANNEL_IN_MONO; int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); 我成功收集了一些byte []数组数据并将其写入本地文件。 不幸的是,该文件无法播放。 我做了一些在线搜索,发现了一个相关的post( 如何使用Android MediaCodec生成AAC ADTS基本流 )。 因此,遇到类似问题的其他人说主要问题是“MediaCodec编码器生成原始AAC流。原始AAC流需要转换为可播放格式,例如ADTS流”。 所以我尝试添加ADTS标头。 不过,在我添加了ADTS标头后(我在下面的代码中注释掉了),我的AudioEncoder甚至都不会写输出音频文件。 有什么我想念的吗? 我的设置是否正确? 欢迎任何建议,意见和意见,非常感谢。 多谢你们! import android.media.MediaCodec; […]

Android AudioRecord初始化每次都失败

我的问题很容易解释 – 我正在尝试创建一个AudioRecord对象,但它无法初始化(即在构造函数之后,getState返回0,表示失败)。 我在运行OS 2.2.1的MotoDroid 1上从Eclipse运行它。 我的AndroidManifest.xml是AFAIK,使用了正确的权限,RECORD_AUDIO(我不知道如何确认): 我执行以下操作来创建AudioRecord: bufferSize = AudioRecord.getMinBufferSize(8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT); audioRecorder = new AudioRecord(AudioSource.MIC, 8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT, 50*bufferSize); if (audioRecorder.getState() != AudioRecord.STATE_INITIALIZED) throw new Exception(“AudioRecord init failed”); audioRecorder.getState()返回0(即STATE_UNINITIALIZED) 我还没有find任何使用这个API的完整示例,我非常喜欢Android初学者,所以解决方案可能很简单。 我该怎么做才能找出失败的原因? 有些人提出了类似的问题,但是他们一定遇到了与我不同的问题,因为他们批准的修复措施对我没有帮助。 最值得注意的是这个 。 但批准的解决方案令人困惑,无论如何都不适用于我。 我还尝试了各种比特率(8000,16000,11025,44100),单声道和立体声以及8和16比特。 成功初始化后没有组合回来。

Android模拟器似乎以96khz录制音频

我的应用程序是从手机的麦克风录制音频,并在其上进行一些实时处理。 它在物理设备上工作正常,但在模拟器中表现得很“有趣”。 它记录了一些东西,但我不太确定它的录音是什么。 看起来在仿真器上,音频样本的读取速率是实际设备的两倍。 在应用程序中,我有一个可视化进度小部件(一个水平移动的记录头),它在模拟器中移动大约两倍。 这是录音循环: int FREQUENCY = 44100; int BLOCKSIZE = 110; int bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 10; AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER, FREQUENCY, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); short[] signal = new short[BLOCKSIZE * 2]; // Times two for stereo audioRecord.startRecording(); while (!isCancelled()) { int bufferReadResult = audioRecord.read(signal, 0, BLOCKSIZE * 2); […]

Android中的实时音频录制和播放以及线程和回调处理

我想要录制现场音频并播放它。就UI而言,应用程序只有三个按钮:一个用于开始录制和流式传输,一个用于播放预录制文件,最后一个用于停止当前任务(录制/播放)。 为此,我分别使用AudioRecord和AudioTrack类进行录制和播放。 我的程序看起来像…. / ** * @author amit * * / public class AudioRecorder extends Activity { private String LOG_TAG = null; /* variables which are required to generate and manage the UI of the App */ // private RecordButton mRecordButton = null; private Button recordBtn, stopBtn, playBtn; /* * variables which are required for […]

AudioFlinger无法创建记录轨道,状态:-1,需要帮助ifx

public class AudioRecorderActivity extends Activity { private static final int RECORDER_SAMPLERATE = 8000; private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; private AudioRecord recorder = null; private static final String TAG = “AudioRecorderActivity”; short[][] buffers = new short[256][160]; int ix = 0; private boolean stopped = false; private void […]

即时音频输入和输出Android

在我的Android应用程序中,我想从智能手机的麦克风中获取一些音频并立即播放,像麦克风一样直播,没有延迟。 我目前正在考虑使用AudioRecord和AudioTrack类(从我读过的内容),但我不太清楚如何继续。 我查看了Stack Overflow上的其他一些问题,但是他们并没有完全回答我想做的事情。 大多数是2012年。 那么如何使用这些类同时输入和输出音频呢? 另外:我看过MediaRecorder API ,但是根据我的阅读,这需要你将音频保存到文件中,我不想这样做。 可以通过tweek来满足我的要求吗? 或者我最好只使用AudioRecord ? 谢谢 编辑: 以下是我在@Pradip Pramanick建议的更新代码: final Thread record = new Thread(new Runnable() { @Override public void run() { while (!Thread.interrupted()) { MediaRecorder microphone = new MediaRecorder(); microphone.setAudioSource(MediaRecorder.AudioSource.MIC); microphone.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); microphone.setOutputFile(filename); microphone.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { microphone.prepare(); } catch (IOException e) { e.printStackTrace(); } microphone.start(); } } }); […]

PCM – > AAC(编码器) – > PCM(解码器)实时正确优化

我正在努力实施 AudioRecord (MIC) -> PCM -> AAC Encoder AAC -> PCM Decode -> AudioTrack?? (SPEAKER) 使用Android 4.1+(API16)上的MediaCodec 。 首先,我成功(但不确定正确优化)实现了PCM -> AAC Encoder MediaCodec PCM -> AAC Encoder ,如下所示 private boolean setEncoder(int rate) { encoder = MediaCodec.createEncoderByType(“audio/mp4a-latm”); MediaFormat format = new MediaFormat(); format.setString(MediaFormat.KEY_MIME, “audio/mp4a-latm”); format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1); format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100); format.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024);//AAC-HE 64kbps format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectHE); encoder.configure(format, […]

使用Android SDK从原始PCM数据创建WAV文件

我正在尝试使用AudioRecord类来记录WAV文件。 问题是它只提供原始PCM数据,如果我将其写入文件,则没有标题信息,因此它不会在任何媒体播放器中播放。 如何从这些原始数据创建WAV文件? 或者,有没有其他方法将Android中的声音录制到WAV文件(或者MP3)? 哦,我知道MediaRecorder可以使用,因为它不支持WAV或MP3格式。