我是新来的android和新的任何有关音频处理。在android中处理/处理音频信号?
所以我需要一步一步的指导从哪里开始。
我已经使用android AudioRecord
来输入麦克风和AudioTrack
类的声音,通过扬声器实时输出,它工作正常。
我想要做的是改变输入信号的幅度/频率并在输出之前添加失真效果。
这是我迄今所做的:
// Calculate minimum buffer size
int bufferSize = AudioRecord.getMinBufferSize(44100,
AudioFormat.CHANNEL_IN_STEREO,AudioFormat.ENCODING_PCM_16BIT);
// AudioRecord Lib
final AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100,
AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT,
bufferSize);
// AudioTrack Lib
final AudioTrack audioPlayer = new AudioTrack(
AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT,
bufferSize, AudioTrack.MODE_STREAM);
record_button = (Button) findViewById(R.id.start_record);
stop_recording = (Button) findViewById(R.id.stop_record);
stop_recording.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Stopped record");
stopped = true;
// TODO Auto-generated method stub
// recorder.stop();
// recorder.release();
record.stop();
record.release();
audioPlayer.stop();
audioPlayer.release();
}
});
record_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("Recording");
record.startRecording();
audioPlayer.play();
new AsyncBuffer(record,audioPlayer).execute();
}
});
}
class asyncBuffer extends AsyncTask<Void, Void, Void>{
AudioRecord record;
AudioTrack audioPlayer;
public AsyncBuffer(AudioRecord record, AudioTrack audioPlayer) {
// TODO Auto-generated constructor stub
this.record = record;
this.audioPlayer = audioPlayer;
}
@Override
protected Void doInBackground(Void... params) {
System.out.println("asynch task");
short[] buffer = new short[160];
while (!stopped) {
Log.i("Map", "Writing new data to buffer");
int n = record.read(buffer, 0, buffer.length);
audioPlayer.write(buffer, 0, n);
}
return null;
}
}
我已经读输入信号,我只需要知道如何处理它在AsyncBuffer
类。
是否有可能通过操纵java代码本身的信号在上述代码中添加失真?如果是这样,怎么样?
如果没有,是否有任何Java库,你可以推荐?
另外,这可以通过简单的Android SDK使用包含的类来实现,或者我将不得不深入并使用NDK(Kissfft等)?
这里的问题在于,您似乎并未具体了解您希望进行的转换类型,或者需要执行哪些类型的计算操作。您可能想要在电脑上播放音频效果软件,以便专门优化您的需求。 –
我也是一个音乐家,我制作自己的音乐,所以如果你正在谈论像逻辑和专业工具这样的制作软件,我对那些和吉他插件比如Amplitube和jam up pro非常熟悉,我每天都在使用它们。但是,他们没有真正提供任何深入的音频处理知识,它都在后台..如果你知道我的意思,那就是为什么在这里发布。 。我需要一个开始.. – ashishashen
同样,您必须确定感兴趣的特定效果,并研究导致该效应的适用转换算法。你不能写一个程序来模糊一般,也不能在这里处理非特定的问题。 –