public synchronized void init() { init(DEFAULT_SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, StreamAudioRecorder.DEFAULT_BUFFER_SIZE); }
@OnClick(R.id.mBtnPlay) public void play() { Observable.just(mOutputFile) .subscribeOn(Schedulers.io()) .subscribe(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(); } }, Throwable::printStackTrace); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_stream); ButterKnife.bind(this); mRatioBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mRatio = (float) progress / 100; mRatioValue.setText(String.valueOf(mRatio)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); mStreamAudioRecorder = StreamAudioRecorder.getInstance(); mStreamAudioPlayer = StreamAudioPlayer.getInstance(); mAudioProcessor = new AudioProcessor(BUFFER_SIZE); mBuffer = new byte[BUFFER_SIZE]; }
@OnClick(R.id.mBtnPlayChanged) public void playChanged() { Observable.just(mOutputFile) .subscribeOn(Schedulers.io()) .subscribe(file -> { try { mStreamAudioPlayer.init(); FileInputStream inputStream = new FileInputStream(file); int read; while ((read = inputStream.read(mBuffer)) > 0) { mStreamAudioPlayer.play(mRatio == 1 ? mBuffer : mAudioProcessor.process(mRatio, mBuffer, StreamAudioRecorder.DEFAULT_SAMPLE_RATE), read); } inputStream.close(); mStreamAudioPlayer.release(); } catch (IOException e) { e.printStackTrace(); } }, Throwable::printStackTrace); }