【问题标题】:Continuous recording in smallest file size. AudioRecord or MediaRecorder?以最小文件大小连续录制。 AudioRecord 或 MediaRecorder?
【发布时间】:2014-11-04 12:03:08
【问题描述】:

我正在开发一个 Android 应用程序。在这个应用程序中,2 个用户互相交谈。在第一个用户侧,应用程序使用 AudioRecord 录制并将录制的文件发送到服务器。另一方面,应用程序将下载这些文件并使用 AudioTrack 播放它们。这个过程是连续的;这意味着我在用户仍在讲话时继续录制和发送。一切正常,但我对要上传的文件大小有疑问。我没有找到控制录制文件大小的方法。如果我能找到一种方法来告诉 audioRecord 使用例如:setAudioSamplingRate(low)、set lowAudioEncodingBitRate(low)、setOutputFormat(OutputFormat.THREE_GPP)、setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB),整个问题就可以解决。

我知道我们可以将这些与 MediaRecorder 一起使用,但我必须使用 AudioRecord,因为我想在发送之前分析声音。

在这里,我们有两件事: i)要么使用 MediaRecorder 而不是 AudioRecord(但我们可以连续录制,这样就不会丢失声音吗?) ii) 或者我们想办法告诉 AudioRecord 使用低分辨率设置

我不关心声音的质量,我想要最便宜的文件大小。 在下面找到我的代码:

录音

int frequency = 11025;
int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, bufferSize);
DataOutputStream dos = getDOS();

int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
for (int i = 0; i < bufferReadResult; i++) dos.writeShort(enc(buffer[i]));

//Upload file to the server

播放

//download from server, then ...

int intSize = android.media.AudioTrack.getMinBufferSize(11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 
final AudioTrack aud = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, intSize, AudioTrack.MODE_STREAM);

short[] arr = SoundFile2Array(f1);
aud.write(arr, 0, (int)(arr.length));

【问题讨论】:

    标签: android audio mediarecorder recording audiotrack


    【解决方案1】:

    如果我理解正确,您希望尽量减少数据流量。

    我认为其中一个问题是 PCM 基本上是未压缩的音频,这对于最小化使用的带宽并不是很好。我认为你想要做的是使用 MediaCodec 创建一个编码器,也许是像 amr/nb 这样的东西。然后通过排队输入缓冲区将音频帧输入编码器,并通过出列输出缓冲区上传编码数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-27
      • 2018-12-24
      • 1970-01-01
      • 2011-08-18
      • 2012-05-27
      • 2011-10-03
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多