gpt4 book ai didi

android - Android AudioRecording失去了音频的最后几秒钟

转载 作者:行者123 更新时间:2023-12-03 02:00:53 26 4
gpt4 key购买 nike

简单的录音机代码会丢失最后几秒钟的音频。

使用AudioRecord类,我将麻烦减少到非常简单的情况。

一个开始按钮,一个停止按钮和一个从AudioRecord对象读取并写入文件的线程。

它运作良好,但是在许多设备上,除非用户在按下停止按钮后继续录制音频三秒钟,否则不会将音频的最后三秒写入文件中。

我正在使用44100单声道16位模式。

设备是运行5.x的Nexus和运行5.0.1的Samsung S4。

坏情况:

按开始按钮,运行线程(.start()),按停止按钮。 .stop().release()在文件上调用.sync()。音频的最后三秒钟不会记录到文件中。

好案例:

按下开始,运行线程,(.start()按下Stop。继续执行录制线程3秒钟,然后在文件上调用.stop().release()调用.sync()。所有预期数据都在文件中。

启动按钮调用以下可运行对象,而停止按钮将recording设置为0,这将导致线程结束。

(我删除了所有try块以提高可读性)

音频记录设置

int minAudioBufferSizeInBytes = AudioRecord.getMinBufferSize( 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);

mAudioRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT , 4 * minAudioBufferSizeInBytes);

int mFileBufferSizeInBytes = 8 * minAudioBufferSizeInBytes;

recording = 1;

记录线程(可运行)
mAudioRecorder.startRecording();
while (recording == 1) {
readsize = mAudioRecorder.read(audiodata, 0, mFileBufferSizeInBytes/2);
if (readsize != AudioRecord.ERROR_INVALID_OPERATION && mAudioRecordFos != null) {
mAudioRecordFos.write(audiodata,0,readsize); // File Output Stream
}
}
if (mRecorderRunOn > 0) { // RunOn time in milliseconds
Log.d(TAG, "AudioRecord record reading on for " + mRecorderRunOn + "ms ");
long readon_ts = System.currentTimeMillis() + mRecorderRunOn;

while (System.currentTimeMillis() < readon_ts) {
readsize = mAudioRecorder.read(audiodata, 0, mFileBufferSizeInBytes/2);
if (readsize>0) {
mAudioRecordFos.write(bytes,0,readsize); // File Output Stream
}
}
}

mAudioRecordFos.getFD().sync();

mAudioRecorder.stop();
mAudioRecorder.release();

在另一个版本中,我在调用.stop()之后继续读取,直到它不再报告任何数据为止,但是该版本并未更改丢失的数据量。

最佳答案

很抱歉,我的OP中的代码运行正常。
事实证明,我的播放机制中存在问题。
通过使用adb从电话中提取音频,然后使用alsa aplay播放录音,我减少了未知数。

我以为我已经检查过几次了,但是又一次通过测试确定了问题所在。

基本上

adb pull /storage/extSdCard/6178190842925110523
aplay -r 48000 -c 1 -f S16_LE 6178190842925110523

确定问题不在代码的记录端。

关于android - Android AudioRecording失去了音频的最后几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com