在Android中创建音频文件的波形,需要使用MediaPlayer和MediaRecorder来录制音频,并使用AudioRecord来获取音频数据。以下是一个简单的示例代码:
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private static final int SAMPLE_RATE = 44100;
private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);
private AudioRecord audioRecord;
private MediaPlayer mediaPlayer;
private MediaRecorder mediaRecorder;
private File audioFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button recordButton = findViewById(R.id.record_button);
Button playButton = findViewById(R.id.play_button);
recordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startRecording();
}
});
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startPlaying();
}
});
audioFile = new File(Environment.getExternalStorageDirectory(), "audio.wav");
if (audioFile.exists()) {
audioFile.delete();
}
try {
audioFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
audioRecord = new AudioRecord.Builder()
.setAudioSource(MediaRecorder.AudioSource.MIC)
.setAudioFormat(new AudioFormat.Builder()
.setEncoding(AUDIO_FORMAT)
.setSampleRate(SAMPLE_RATE)
.setChannelMask(CHANNEL_CONFIG)
.build())
.setBufferSizeInBytes(BUFFER_SIZE)
.build();
mediaPlayer = new MediaPlayer();
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
}
private void startRecording() {
audioRecord.startRecording();
mediaRecorder.start();
}
private void startPlaying() {
try {
mediaPlayer.setDataSource(audioFile.getAbsolutePath());
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例代码中,我们使用了AudioRecord来录制音频,并使用MediaRecorder来保存音频文件。我们还使用了MediaPlayer来播放音频文件。
在这个示例代码中,我们使用了一个按钮来开始录制音频,并使用另一个按钮来开始播放音频。
在这个示例代码中,我们使用了WAV格式来保存音频文件。如果需要创建音频文件的波形,可以使用第三方库,例如AudioWaveform。
算法大赛
云+社区沙龙online [技术应变力]
Elastic 实战工作坊
Elastic 实战工作坊
云+社区沙龙online [新技术实践]
领取专属 10元无门槛券
手把手带您无忧上云