【发布时间】:2015-08-22 11:15:04
【问题描述】:
简而言之,我不知道声音在数组中的确切位置。 反转整个数组会破坏标题,并且不再可播放。
我正在使用以下参数录制声音
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");
}
}
【问题讨论】:
-
你可以参考这篇文章,我认为这会对你有所帮助。 stackoverflow.com/questions/5625573/…
-
声音不只是
raw data。它有一个页眉,可能还有一个页脚。您必须研究您要使用的specific audio format。 -
您的音频是使用 AMR-NB 编解码器压缩的,因此即使您的标头正确,只是切换压缩的音频字节可能会给您留下垃圾。