Преобразование проекта RxAndroidAudio (https://github.com/Piasy/RxAndroidAudio) для использования в HarmonyOS. Библиотека для работы с аудио, поддерживающая часть функционала Rx.
Проект является адаптацией открытого проекта Piasy/RxAndroidAudio для использования в HarmonyOS. Подробнее можно узнать по адресу https://github.com/Piasy/RxAndroidAudio.
Переделка версия: v1.7.0
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
.Используйте Maven для интеграции:
allprojects {
repositories {
mavenCentral()
}
}
implementation 'com.gitee.ts_ohos:rxohosaudio:1.0.0'
implementation 'com.gitee.ts_ohos:audioProcessor:1.0.0'
```java
mAudioRecorder = AudioRecorder.getInstance();
mAudioFile = new File(
Environment.getExternalStorageDirectory().getAbsolutePath() +
File.separator + System.nanoTime() + ".file.m4a");
источник = new Источник();
источник.setRecorderAudioSource(Recorder.AudioSource.MIC);
audiоСвойство = new СвойствоЗвука.Builder()
.setRecorderSamplingRate(AUDIO_SAMPLE_RATE_HZ)
.setRecorderBitRate(AUDIO_BIT_RATE_HZ)
.setRecorderAudioEncoder(Recorder.AudioEncoder.AAC)
.build();
storageProperty = new СвойствоУчета.Builder()
.setRecorderFile(mAudioFile)
.setRecorderMaxDurationMs(-1)
.setRecorderMaxFileSizeBytes(-1)
.build();
Запись аудиофайла осуществляется следующими методами:
```java
mAudiorecorder.prepareRecord(source, Recorder.OutputFormat.MPEG_4,
audiopropery, storageproperty);
mAudiorecorder.startRecord();
// ...
mAudiorecorder.stopRecord();
С помощью PlayConfig
можно настроить источник звука, установить громкость или включить циклический воспроизведение:
mRxAudioPlayer.play(PlayConfig.file(audioFile).looping(true).build())
.subscribeOn(Schedulers.io())
.observeOn(HarmonySchedulers.mainThread())
.subscribe(new Observer<Boolean>() {
@Override
public void onSubscribe(final Disposable disposable) {
}
@Override
public void onNext(final Boolean aBoolean) {
// готово к проигрыванию
}
});
``` @Override
public void onError(final Throwable throwable) {
}
@Override
public void onComplete() {
// завершение проигрывания
// ВАЖНОЕ УПРАЖНЕНИЕ: если воспроизведение циклическое, то Observable никогда не завершится, вам потребуется остановить воспроизведение
// в onDestroy, иначе произойдет утечка памяти!
}
});
PlayConfig
PlayConfig.file(audioFile) // проигрывание локального файла
//.res(getApplicationContext(), R.raw.audio_record_end) // или проигрывание ресурса raw
.looping(true) // циклическое воспроизведение или нет
.leftVolume(1.0F) // громкость слева, но данный проигрыватель не поддерживает отдельную регулировку громкости слева и справа
.rightVolume(1.0F) // громкость справа, но данный проигрыватель не поддерживает отдельную регулировку громкости слева и справа
.build(); // сборка конфигурации и запуск!
mOutputFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + System.nanoTime() + ".stream.m4a"); mOutputFile.createNewFile(); mFileOutputStream = new FileOutputStream(mOutputFile); mStreamAudioRecorder.start(new StreamAudioRecorder.AudioDataCallback() { @Override public void onAudioData(final byte[] data, final int size) { if (mFileOutputStream != null) { try { mFileOutputStream.write(data, 0, size); } catch (IOException e) { e.printStackTrace(); } } } });
@Override
public void onError() {
new EventHandler(EventRunner.getMainEventRunner()).postSyncTask(new Runnable() {
@Override
public void run() {
new ToastDialog(StreamAbility.this).setText("Запись не удалась").setDuration(DIALOG_DURATION).show();
mBtnStart.setText("Старт");
mIsRecording = false;
}
});
}
}### Проигрывание аудио потока (Play a stream)
<img src="./pic/audioStreamPlay.jpg" alt="Проигрывание аудио потока" style="zoom:25%;" div align=center />
```java
Observable.just(mOutputFile).subscribeOn(Schedulers.io()).subscribe(new Action1<File>() {
@Override
public void call(File file) {
try {
mStreamAudioPlayer.init();
FileInputStream inputStream = new FileInputStream(file);
int read;
while ((read = inputStream.read(mBuffer)) > 0) {
mStreamAudioPlayer.play(mBuffer, read);
}
inputStream.close();
mStreamAudioPlayer.release();
} catch (IOException e) {
e.printStackTrace();
}
}
});
mStreamAudioPlayer.play(
mAudioProcessor.process(mRatio, mBuffer, StreamAudioRecorder.DEFAULT_SAMPLE_RATE),
read);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )