Java 如何在Android上录制音频并更改音高?
我正在尝试学习Android开发,我想知道如何从麦克风捕获音频,然后改变音频中的声音,使其听起来更厚或更清晰等。Java 如何在Android上录制音频并更改音高?,java,android,audio,attributes,Java,Android,Audio,Attributes,我正在尝试学习Android开发,我想知道如何从麦克风捕获音频,然后改变音频中的声音,使其听起来更厚或更清晰等。 简而言之:如何录制和更改声音的参数?(当然是在java中)我实际上正在开发一个。录制音频是很容易的,你可以复制我的代码。编写一个音频滤波器是一项困难得多的任务,它需要数字信号处理和相关技术的知识 你可以从阅读 同时,以下是在android上录制音频的代码: public String record() { // please note: the em
简而言之:如何录制和更改声音的参数?(当然是在java中)我实际上正在开发一个。录制音频是很容易的,你可以复制我的代码。编写一个音频滤波器是一项困难得多的任务,它需要数字信号处理和相关技术的知识 你可以从阅读 同时,以下是在android上录制音频的代码:
public String record() {
// please note: the emulator only supports 8 khz sampling.
// so in test mode, you need to change this to
//int frequency = 8000;
int frequency = 11025;
int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/reverseme.pcm");
// Delete any previous recording.
if (file.exists())
file.delete();
// Create the new file.
try {
file.createNewFile();
} catch (IOException e) {
throw new IllegalStateException("Failed to create "
+ file.toString());
}
try {
// Create a DataOuputStream to write the audio data into the saved
// file.
OutputStream os = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);
// Create a new AudioRecord object to record the audio.
int bufferSize = 2 * AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(
MediaRecorder.AudioSource.MIC, frequency,
channelConfiguration, audioEncoding, bufferSize);
short[] buffer = new short[bufferSize];
audioRecord.startRecording();
Log.e(tag, "Recording started");
long start = SystemClock.elapsedRealtime();
long end = start + 15000;
while (SystemClock.elapsedRealtime() < end) {
int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
for (int i = 0; i < bufferReadResult; i++)
if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) {
dos.writeShort( EndianUtils.swapShort(buffer[i]));
} else {
dos.writeShort( buffer[i] );
}
}
Log.e(tag, "Recording stopped");
audioRecord.stop();
bos.flush();
dos.close();
isRecording = false;
return file.getAbsolutePath();
} catch (Exception e) {
Log.e(tag, "Recording Failed:" + e.getMessage());
throw new RuntimeException("Failed to create " + e.getMessage());
}
}
公共字符串记录(){
//请注意:模拟器仅支持8 khz采样。
//所以在测试模式下,您需要将其更改为
//int频率=8000;
int频率=11025;
int channelConfiguration=AudioFormat.CHANNEL\u CONFIGURATION\u MONO;
int audioEncoding=AudioFormat.ENCODING_PCM_16位;
File File=新文件(Environment.getExternalStorageDirectory()
.getAbsolutePath()+“/reverseme.pcm”);
//删除以前的任何记录。
if(file.exists())
delete();
//创建新文件。
试一试{
createNewFile();
}捕获(IOE异常){
抛出新的IllegalStateException(“未能创建”
+file.toString());
}
试一试{
//创建DataOutStream以将音频数据写入保存的
//文件。
OutputStream os=新文件OutputStream(文件);
BufferedOutputStream bos=新的BufferedOutputStream(os);
DataOutputStream dos=新的DataOutputStream(bos);
//创建新的AudioRecord对象以录制音频。
int bufferSize=2*AudioRecord.getMinBufferSize(频率,
信道配置、音频编码);
音频记录=新的音频记录(
MediaRecorder.AudioSource.MIC,频率,
信道配置、音频编码、缓冲区大小);
short[]buffer=新的short[bufferSize];
录音。开始录制();
Log.e(标签“记录已开始”);
long start=SystemClock.elapsedRealtime();
长端=起点+15000;
while(SystemClock.elapsedRealtime()
您可以使用Android SoundPool更改音频文件的音高,检查问题的答案
当有人在麦克风附近讲话时,要录制音频,请检查此项