我是新來的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
同樣,您必須確定感興趣的特定效果,並研究導致該效應的適用轉換算法。你不能寫一個程序來模糊一般,也不能在這裏處理非特定的問題。 –