gpt4 book ai didi

android - 以最小文件大小连续录制。 AudioRecord或MediaRecorder?

转载 作者:行者123 更新时间:2023-12-02 23:49:22 26 4
gpt4 key购买 nike

我正在开发一个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));

最佳答案

如果我理解正确,则希望最大程度地减少数据流量。

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

关于android - 以最小文件大小连续录制。 AudioRecord或MediaRecorder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734676/

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