Пример Android AudioRecord

Я разрабатываю приложение для Android, и мне нужно реализовать class AudioRecord для записи звука пользователя. После некоторых исследований (которые не предоставили достаточной информации) и нескольких неудачных попыток мне было интересно, сможет ли кто-нибудь помочь мне, разместив пример (код) о том, как захватить высококачественный звук с помощью AudioRecord. Я был бы очень признателен. спасибо

Здесь я размещаю вам пример кода, который записывает хорошее качество звука с использованием AudioRecord API .

Примечание. Если вы используете эмулятор, качество звука будет не очень хорошим, потому что мы используем частоту дискретизации 8k, которая поддерживается только в эмуляторе. В устройстве используется частота дискретизации до 44,1 тыс. Для лучшего качества.

public class Audio_Record extends Activity { private static final int RECORDER_SAMPLERATE = 8000; private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; private AudioRecord recorder = null; private Thread recordingThread = null; private boolean isRecording = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setButtonHandlers(); enableButtons(false); int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING); } private void setButtonHandlers() { ((Button) findViewById(R.id.btnStart)).setOnClickListener(btnClick); ((Button) findViewById(R.id.btnStop)).setOnClickListener(btnClick); } private void enableButton(int id, boolean isEnable) { ((Button) findViewById(id)).setEnabled(isEnable); } private void enableButtons(boolean isRecording) { enableButton(R.id.btnStart, !isRecording); enableButton(R.id.btnStop, isRecording); } int BufferElements2Rec = 1024; // want to play 2048 (2K) since 2 bytes we use only 1024 int BytesPerElement = 2; // 2 bytes in 16bit format private void startRecording() { recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement); recorder.startRecording(); isRecording = true; recordingThread = new Thread(new Runnable() { public void run() { writeAudioDataToFile(); } }, "AudioRecorder Thread"); recordingThread.start(); } //convert short to byte private byte[] short2byte(short[] sData) { int shortArrsize = sData.length; byte[] bytes = new byte[shortArrsize * 2]; for (int i = 0; i < shortArrsize; i++) { bytes[i * 2] = (byte) (sData[i] & 0x00FF); bytes[(i * 2) + 1] = (byte) (sData[i] >> 8); sData[i] = 0; } return bytes; } private void writeAudioDataToFile() { // Write the output audio in byte String filePath = "/sdcard/voice8K16bitmono.pcm"; short sData[] = new short[BufferElements2Rec]; FileOutputStream os = null; try { os = new FileOutputStream(filePath); } catch (FileNotFoundException e) { e.printStackTrace(); } while (isRecording) { // gets the voice output from microphone to byte format recorder.read(sData, 0, BufferElements2Rec); System.out.println("Short wirting to file" + sData.toString()); try { // // writes the data to file from buffer // // stores the voice buffer byte bData[] = short2byte(sData); os.write(bData, 0, BufferElements2Rec * BytesPerElement); } catch (IOException e) { e.printStackTrace(); } } try { os.close(); } catch (IOException e) { e.printStackTrace(); } } private void stopRecording() { // stops the recording activity if (null != recorder) { isRecording = false; recorder.stop(); recorder.release(); recorder = null; recordingThread = null; } } private View.OnClickListener btnClick = new View.OnClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.btnStart: { enableButtons(true); startRecording(); break; } case R.id.btnStop: { enableButtons(false); stopRecording(); break; } } } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); } return super.onKeyDown(keyCode, event); } } 

Для более подробной информации попробуйте этот AUDIORECORD BLOG .

Счастливое кодирование !!

Вот комплексное решение, которое я реализовал для streamовой передачи звука на микрофоне Android на сервер для воспроизведения: Android AudioRecord для сервера по протоколам UDP

  • Как добавить новый звук (не смешивание) в видео с помощью ffmpeg?
  • Воспроизведение аудио с низкой задержкой на Android
  • Использование Apple FFT и Accelerate Framework
  • Возможно ли воспроизводить streamи интернет-радиосигналов shoutcast с помощью html5?
  • Как передавать аудио / видео файлы, такие как MP3, MP4, AVI и т. Д. С помощью сервлета
  • Онлайн-приложение для streamового радио для Android
  • Преобразование WAV в байтовый массив в java
  • android: определение уровня звука
  • Как остановить музыкальный клип на Java?
  • Android OpenAL?
  • Android AudioTrack воспроизводит файл .wav, получая только белый шум
  • Interesting Posts

    boolean против BitSet: что более эффективно?

    Получить твиты с фотографиями с помощью twitter search api

    DialogFragment.getDialog возвращает null

    Почему адрес массива равен его значению в C?

    Службы Google Play устарели. Требуется 11011000, но найдено 10289574

    rails server bin / rails: 6: предупреждение: уже инициализированная постоянная ошибка APP_PATH

    Каковы различия между обычным и тонким пакетом jquery?

    @property сохранять, назначать, копировать, неатомически в Objective-C

    Невозможно отформатировать Micro SDcard

    Метод ввода чешского языка и поддержка шрифтов в gvim 7.4 на Windows 7

    Использование UDF в Excel для обновления рабочего листа

    Плюсы / минусы использования редукс-саги с генераторами ES6 по сравнению с редукцией с ES2017 async / wait

    Как реализовать PriorityBlockingQueue с помощью ThreadPoolExecutor и настраиваемых задач

    Добавление объектов в пространство имен пакетов

    Как я могу иметь другой текст в нижнем колонтитуле на каждой странице документа Word?

    Давайте будем гением компьютера.