我正在開發一個Android應用程序。在這個應用程序中,2個用戶互相交談。在第一位用戶的身邊,應用程序使用AudioRecord進行錄製並將錄製的文件發送到服務器。另一方面,應用程序將下載這些文件並使用AudioTrack播放它們。這個過程是連續的;這意味着我在用戶仍在說話時保持錄音和發送。一切工作正常,但我有一個上傳文件大小的問題。我沒有找到控制錄製文件大小的方法。如果我能找到一種方法來告訴audioRecord使用,例如:setAudioSamplingRate(low),set lowAudioEncodingBitRate(low),setOutputFormat(OutputFormat.THREE_GPP),setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB),則可以解決整個問題。以最小的文件尺寸連續錄製。 AudioRecord或MediaRecorder?
我知道我們可以將這些與MediaRecorder一起使用,但我必須使用AudioRecord,因爲我想在發送之前分析聲音。
在這裏,我們有兩兩件事: 我)或者使用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));