在坚果壳中,我不知道声音在阵列中的确切位置。 反转整个数组会破坏标题,并且它不再可播放。
我正在使用以下参数录制声音
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
下面的代码反转了数组,但显然是错误的,因为我不知道要跳过多少个字节的字节。任何人都可以通过改变下面的功能来帮助,只反转音频部分?
private static void reverseAudio(byte[] data) {
for (int left = 0, right = data.length - 1; left < right; left++, right--)
{
byte temp = data[left];
data[left] = data[right];
data[right] = temp;
}
谢谢!
@JiangYD我是Android的新手,所以你的答案看起来很有希望,但我真的不能理解它。我正在使用MediaRecorder来创建音频文件。
AudioRecord类在哪里适合图片?
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
private void stopRecording() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
private void startPlaying() {
mPlayer = new MediaPlayer();
try {
File f = new File(mFileName);
byte[] byteArray = null;
InputStream inputStream = new FileInputStream(f);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024 * 8];
int bytesRead = 0;
while ((bytesRead = inputStream.read(b)) != -1) {
bos.write(b, 0, bytesRead);
}
byteArray = bos.toByteArray();
reverseAudio(byteArray);
File tempMp3 = File.createTempFile("kurchina", "3gpp", getCacheDir());
tempMp3.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempMp3);
fos.write(byteArray);
fos.close();
FileInputStream fis = new FileInputStream(tempMp3);
mPlayer.setDataSource(fis.getFD());
mPlayer.prepare();
mPlayer.start();
}
catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
}
答案 0 :(得分:1)
您需要PCM格式进行音频处理。
new AudioRecord(MediaRecorder.AudioSource.DEFAULT
, SAMPLE_RATE
, AudioFormat.CHANNEL_IN_STEREO
, AudioFormat.ENCODING_PCM_16BIT
, CONNECT_TIMEOUT * SAMPLE_RATE * 2 / 1000);
捕获的音频数据将在您需要时短[左],短[右]。 您可以添加第3个AMR编码器,在处理后将PCM编码为AMR。