Java 录制音乐之声应用程序
我正在开发android音乐钢琴应用程序。在其中,我使用soundpool播放音频,但如何录制声音,以便用户可以在录制音乐节拍的同时唱歌和录制自己的声音这里有两个功能,一个用于录制,另一个用于播放Java 录制音乐之声应用程序,java,android,audio,Java,Android,Audio,我正在开发android音乐钢琴应用程序。在其中,我使用soundpool播放音频,但如何录制声音,以便用户可以在录制音乐节拍的同时唱歌和录制自己的声音这里有两个功能,一个用于录制,另一个用于播放 private void startRecord(){ File file = new File(Environment.getExternalStorageDirectory(), "test.pcm"); try { file.createNewFile(
private void startRecord(){
File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");
try {
file.createNewFile();
recording=true;
OutputStream outputStream = new FileOutputStream(file);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream);
int minBufferSize = AudioRecord.getMinBufferSize(SmpleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
short[] audioData = new short[minBufferSize];
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
SmpleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
minBufferSize);
AudioManager audio=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
audio.setMicrophoneMute(true);
//int sessionId=audioRecord.getAudioSessionId();
// NoiseSuppressor.create(sessionId);
audioRecord.startRecording();
while(recording){
int numberOfShort = audioRecord.read(audioData, 0, minBufferSize);
for(int i = 0; i < numberOfShort; i++){
dataOutputStream.writeShort(audioData[i]);
}
}
audioRecord.stop();
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
void playRecord(){
File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");
int shortSizeInBytes = Short.SIZE/Byte.SIZE;
int bufferSizeInBytes = (int)(file.length()/shortSizeInBytes);
short[] audioData = new short[bufferSizeInBytes];
try {
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);
int i = 0;
while(dataInputStream.available() > 0){
audioData[i] = dataInputStream.readShort();
i++;
}
dataInputStream.close();
AudioTrack audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
SmpleRate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSizeInBytes,
AudioTrack.MODE_STREAM);
audioTrack.play();
audioTrack.write(audioData, 0, bufferSizeInBytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void startRecord(){
File File=新文件(Environment.getExternalStorageDirectory(),“test.pcm”);
试一试{
createNewFile();
记录=真;
OutputStream OutputStream=新文件OutputStream(文件);
BufferedOutputStream BufferedOutputStream=新的BufferedOutputStream(outputStream);
DataOutputStream DataOutputStream=新的DataOutputStream(bufferedOutputStream);
int minBufferSize=AudioRecord.getMinBufferSize(SMPrelate,
单声道中的AudioFormat.CHANNEL\u,
音频格式。编码(PCM(16位);
short[]audioData=新的short[minBufferSize];
AudioRecord AudioRecord=新的录音(MediaRecorder.AudioSource.MIC,
宽容的,
单声道中的AudioFormat.CHANNEL\u,
AudioFormat.ENCODING_PCM_16位,
最小尺寸);
AudioManager音频=(AudioManager)this.getSystemService(Context.audio\u服务);
音频。设置麦克风静音(true);
//int sessionId=audioRecord.getAudioSessionId();
//NoiseSuppressor.create(sessionId);
录音。开始录制();
同时(录音){
int numberOfShort=audioRecord.read(audioData,0,minBufferSize);
for(int i=0;i0){
audioData[i]=dataInputStream.readShort();
i++;
}
dataInputStream.close();
AudioTrack=新的AudioTrack(
AudioManager.STREAM_音乐,
宽容的,
AudioFormat.CHANNEL\u OUT\u MONO,
AudioFormat.ENCODING_PCM_16位,
bufferSizeInBytes,
音频跟踪模式(音频流);
音轨播放();
audioTrack.write(音频数据,0,缓冲大小为字节);
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
我们在这里输入整数值。您可以使用44100代替采样率,因为这是所有设备都认可的。您需要显示您所做的工作以及问题所在。别指望这项工作能为你完成。