java - 减小音频记录的大小
问题描述
我正在使用音频记录来记录音频并将字节发送到远程服务器,但我发现与媒体记录器相比,字节的大小更大,但不幸的是,我必须使用音频记录来处理字节
我的问题是我该怎么做减小它的大小,我在这里听说过媒体编解码器,但我没有使用它这是我的代码
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
//Conversion of short to byte
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; ++i) {
bytes[i * 2] = (byte) (sData[i] & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
sData[i] = 0;
}
return bytes;
}
private void writeAudioDataToFile() {
// Write the output audio in byte
short sData[] = new short[BufferElements2Rec];
while (isRecording) {
// gets the voice output from microphone to byte format
recorder.read(sData, 0, BufferElements2Rec);
// System.out.println("Short wirting to file" + sData.toString());
try {
// writes the data to file from buffer stores the voice buffer
byte bData[] = short2byte(sData);
String bdata2 =Base64.encodeToString(bData,Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void stopRecording() {
// stops the recording activity
if (null != recorder) {
isRecording = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
解决方案
推荐阅读
- javascript - 使用 concat() 方法组合多个数组
- java - 我得到了从 csv 中的列打印随机值的代码,但有时它可以工作,有时它不能
- wordpress - WordPress网站中的主链接在复制粘贴后变为一长串字母和数字
- asp.net - 具有 ASP.NET 一对多关系的实体框架导致 NullReference 错误
- rust - 从块表达式中退出?(类似于函数“return”)
- python - Django 完整性错误:不存在的列中的空值
- javascript - 如何使用 Cypress 获取 javacript 弹出窗口中的内容?
- angular - 一段时间后如何只调用一次http请求
- python - 使用带有参数/条目的 tkinter 按钮打开另一个 python 文件
- c++ - 在使用 epoll 检查要读取的内容时,新连接是我应该从服务器 FD 获得的唯一数据吗