Басовая библиотека на андроиде: как сохранить аудио в файл? - PullRequest
0 голосов
/ 28 апреля 2018

Я занимаюсь разработкой приложения с использованием библиотеки аудио баса. о функции изменения голоса, я могу успешно воспроизводить аудио, как это, однако я не могу сохранить его в пользовательский файл:

BASS.BASS_MusicFree(chan);
        BASS.BASS_StreamFree(chan);
        if ((chan = BASS.BASS_StreamCreateFile(new BASS.Asset(getAssets(), "test.mp3"), 0, 0, BASS.BASS_MUSIC_DECODE)) == 0
                && (chan = BASS.BASS_MusicLoad(new BASS.Asset(getAssets(), "test.mp3"), 0, 0, BASS.BASS_SAMPLE_LOOP | BASS.BASS_MUSIC_RAMP | floatable, 1)) == 0) {
            // whatever it is, it ain't playable
            ((Button) findViewById(R.id.open)).setText("press here to open a file");
            Error("Can't play the file");
            return;
        }

        chan = BASS_FX.BASS_FX_TempoCreate(chan, BASS.BASS_SAMPLE_MONO);//enable pitch
        chanFX = BASS_FX.BASS_FX_TempoGetSource(chan);
        ((Button) findViewById(R.id.open)).setText("test");
        setupFX(mPitch, mRate, mIdistortionListener); 
        BASS.BASS_ChannelPlay(chan, false);
        BASS.BASS_SetVolume(0.9f);

Я занимаюсь разработкой приложения с использованием библиотеки аудио баса. о функции изменения голоса, однако я не могу сохранить его в пользовательский файл:

   mBtnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String path = testPath();
            savePath(path);
            Toast.makeText(TextActivity.this, "save successfully" + path, Toast.LENGTH_SHORT).show();

        }
    });



    private String testPath() {
    File localFile = new File(Environment.getExternalStorageDirectory().getPath(), "testVoid");
    if (!localFile.exists()) {
        localFile.mkdirs();
    }
    String path = localFile.getAbsolutePath() + "/record" + ".wav";
    Log.d("mvn", path);
    return path;
}



  public void savePath(String filePath) {

    long len = BASS.BASS_ChannelGetLength(chan, BASS.BASS_POS_BYTE);
    double time = BASS.BASS_ChannelBytes2Seconds(chan, len);

    File localFile = new File(filePath);
    //flag=262208
    if ((!isEmpty(filePath)) && (chan != 0) && (BASSenc.BASS_Encode_Start(chan, filePath, 262208, null, Integer.valueOf(0)) != 0)) {
        int i1;
        try {
            ByteBuffer localByteBuffer = ByteBuffer.allocateDirect(20000);
            do {
                i1 = BASS.BASS_ChannelGetData(chan, localByteBuffer, localByteBuffer.capacity());
            } while ((i1 != -1) && (i1 != 0));
            return;
        } catch (Exception localException) {
            localException.printStackTrace();
        }

    }
}
...