public class MainActivity extends Activity {
private int freq = 8000;
private AudioRecord audioRecord = null;
private Thread Rthread = null;
int PERMISSION_ALL = 1;
String[] PERMISSIONS = {Manifest.permission.RECORD_AUDIO};
private AudioTrack audioTrack = null;
byte[] buffer = new byte[freq];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(!hasPermissions(this, PERMISSIONS)){
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
final int bufferSize = AudioRecord.getMinBufferSize(freq,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, freq,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB, bufferSize);
audioTrack = new AudioTrack(AudioManager.ROUTE_HEADSET, freq,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB, bufferSize,
AudioTrack.MODE_STREAM);
LoudnessEnhancer enhancer = new LoudnessEnhancer(audioTrack.getAudioSessionId());
enhancer.setTargetGain(100);
enhancer.setEnabled(true);
audioTrack.setPlaybackRate(freq);
buffer = new byte[bufferSize];
audioRecord.startRecording();
Log.i("info", "Audio Recording started");
audioTrack.play();
Log.i("info", "Audio Playing started");
Rthread = new Thread(new Runnable() {
public void run() {
while (true) {
try {
audioRecord.read(buffer, 0, bufferSize);
audioTrack.write(buffer, 0, buffer.length);
} catch (Throwable t) {
Log.e("Error", "Read write failed");
t.printStackTrace();
}
}
}
});
Rthread.start();
}
public static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
}
Этот код может считывать входной сигнал с микрофона и воспроизводить его на динамике/подключенных наушниках. Все идет нормально. Теперь мне нужно увеличить громкость входа. Я попробовал предложенное здесь решение, но в итоге получил очень искаженный звук. Я также попробовал LoudnessEnhancer, но, похоже, он не дал никакого эффекта.
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); final int bufferSize = AudioRecord.getMinBufferSize(freq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, freq, AudioFormat.CHANNEL_CONFIGURATION_MONO, MediaRecorder.AudioEncoder.AMR_NB, bufferSize);
audioTrack = new AudioTrack(AudioManager.ROUTE_HEADSET, freq, AudioFormat.CHANNEL_CONFIGURATION_MONO, MediaRecorder.AudioEncoder.AMR_NB, bufferSize, AudioTrack.MODE_STREAM);
LoudnessEnhancer enhancer = new LoudnessEnhancer(audioTrack.getAudioSessionId());
Этот код может считывать входной сигнал с микрофона и воспроизводить его на динамике/подключенных наушниках. Все идет нормально. Теперь мне нужно увеличить громкость входа. Я попробовал предложенное здесь решение, но в итоге получил очень искаженный звук. Я также попробовал LoudnessEnhancer, но, похоже, он не дал никакого эффекта.
В настоящее время я разрабатываю модульный тест для своих маршрутов и столкнулся со странной ситуацией.
У меня есть несколько маршрутов, которые я создал в файле маршруты/fortify.php. >
Некоторые из этих маршрутов используют другой fortify.guard...
Я использую cpanel с темой WordPress, которая показывает PHP как устаревший, когда я собираюсь обновить его, облачный Linux говорит, что он усилен и делать нечего. Ошибка отображается на панели, и кажется, что я не могу активировать плагин участника...
Я пытаюсь преобразовать его произведение рабочего кода в поток:
Map data = new HashMap();
for (Scooter scooter : scooters) {
scooter.getRentalDays().iterator().forEachRemaining(e -> {
int newVal = scooter.getMileage() * scooter.getMileageRate();...
Я использую пакет MudExRichTextEdit в проекте своей компании, и как новый разработчик я всегда хочу и должен спрашивать, попал ли я в тяжелую ситуацию.
В настоящее время с этим редактором форматированного текста я не найти где угодно возможность...
Я использую пакет MudExRichTextEdit в проекте своей компании, и как новый разработчик я всегда хочу и должен спрашивать, попал ли я в тяжелую ситуацию.
В настоящее время с этим редактором форматированного текста я не найти где угодно возможность...