Аудиозапись, глючный звук ⇐ Android
Аудиозапись, глючный звук
Я использую AudioRecord API для записи внутреннего звука. Иногда этот код работает и записывает звук отлично, но иногда он дает сбои. Я пробовал разные методы записи, но ни один из них не работал точно, иногда в фоновом режиме все еще случаются сбои.
Ссылка на плохо записанный звук:
Конфигурация AudioPlaybackCaptureConfiguration = новый AudioPlaybackCaptureConfiguration.Builder(mediaProjection) .addMatchingUsage(AudioAttributes.USAGE_MEDIA) .строить(); audioFormat = новый AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelMask(AudioFormat.CHANNEL_IN_STEREO) .строить(); audioRecord = новый AudioRecord.Builder() .setAudioFormat(аудиоформат) .setAudioPlaybackCaptureConfig(конфигурация) .строить(); audioRecord.startRecording(); новая тема(() -> { в то время как (записьАудио) { пытаться { конечный буфер ByteBuffer = ByteBuffer.allocateDirect(AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)); пытаться { os = новый FileOutputStream(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudio.pcm"); } catch (Исключение е) { е.printStackTrace(); } Log.e("writeAudioDataToFile", "Запись."); Log.e("writeAudioDataToFile", String.valueOf(AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT))); audioRecord.read(buffer.array(), 0, AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)); os.write(buffer.array(), 0, AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)); буфер.очистить(); } catch (Исключение е) { записьАудио = ложь; аудиоЗапись.стоп(); аудиоЗапись.выпуск(); аудиоЗапись = ноль; Данные = ноль; пытаться { ОС.закрыть(); } catch (Исключение e1) { е.printStackTrace(); } ОС = ноль; новый файл(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudiıInProcess.pcm").delete(); новый файл(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudio.pcm").delete(); новый файл(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudio.mp3").delete(); showNotification (контекст); е.printStackTrace(); } Он должен записывать звук без сбоев в фоновом режиме.
Я использую AudioRecord API для записи внутреннего звука. Иногда этот код работает и записывает звук отлично, но иногда он дает сбои. Я пробовал разные методы записи, но ни один из них не работал точно, иногда в фоновом режиме все еще случаются сбои.
Ссылка на плохо записанный звук:
Конфигурация AudioPlaybackCaptureConfiguration = новый AudioPlaybackCaptureConfiguration.Builder(mediaProjection) .addMatchingUsage(AudioAttributes.USAGE_MEDIA) .строить(); audioFormat = новый AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelMask(AudioFormat.CHANNEL_IN_STEREO) .строить(); audioRecord = новый AudioRecord.Builder() .setAudioFormat(аудиоформат) .setAudioPlaybackCaptureConfig(конфигурация) .строить(); audioRecord.startRecording(); новая тема(() -> { в то время как (записьАудио) { пытаться { конечный буфер ByteBuffer = ByteBuffer.allocateDirect(AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)); пытаться { os = новый FileOutputStream(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudio.pcm"); } catch (Исключение е) { е.printStackTrace(); } Log.e("writeAudioDataToFile", "Запись."); Log.e("writeAudioDataToFile", String.valueOf(AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT))); audioRecord.read(buffer.array(), 0, AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)); os.write(buffer.array(), 0, AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT)); буфер.очистить(); } catch (Исключение е) { записьАудио = ложь; аудиоЗапись.стоп(); аудиоЗапись.выпуск(); аудиоЗапись = ноль; Данные = ноль; пытаться { ОС.закрыть(); } catch (Исключение e1) { е.printStackTrace(); } ОС = ноль; новый файл(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudiıInProcess.pcm").delete(); новый файл(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudio.pcm").delete(); новый файл(context.getExternalFilesDir(Environment.DIRECTORY_MUSIC) + "/tempAudio.mp3").delete(); showNotification (контекст); е.printStackTrace(); } Он должен записывать звук без сбоев в фоновом режиме.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение