Ошибка setDataSourceFD .: status = 0x80000000 во время воспроизведения аудио - PullRequest
0 голосов
/ 07 февраля 2019

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

Я записываю своиаудио, выполнив следующие действия: -

MediaRecorder mAudioRecorder = new MediaRecorder();
    mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    mAudioRecorder.setOutputFile(outputFile);
    startRecording();

Когда я записываю вышеуказанное аудио, оно записывается и воспроизводится правильно.Теперь для обрезки этого аудио я использую библиотеку [this] [1].

    CheapSoundFile cheapSoundFile = CheapSoundFile.create(in_file_path,listner);

    int mSampleRate = cheapSoundFile.getSampleRate();

    int mSamplesPerFrame = cheapSoundFile.getSamplesPerFrame();

    int startFrame = Utilities.secondsToFrames(5.0,mSampleRate, mSamplesPerFrame);

    int endFrame = Utilities.secondsToFrames(30.0, mSampleRate,mSamplesPerFrame);

String outputFileDirectory = Environment.getExternalStorageDirectory().getAbsolutePath() + this.getString(R.string.recording_folder);

                try
                {
                    File dir = new File(outputFileDirectory);
                    if (!dir.exists())
                    {
                        dir.mkdirs();
                    }
                    mFileNumber++;
                    outputFile = outputFileDirectory + "Clip_" + String.valueOf(mFileNumber) + this.getString(R.string.recording_mp3);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
    cheapSoundFile.WriteFile(outputFile , startFrame, endFrame-startFrame);

    final CheapSoundFile.ProgressListener listener = new CheapSoundFile.ProgressListener() {
        public boolean reportProgress(double frac) {

        return true; 
        }
    };

Затем я воспроизводю обрезанный файл следующим образом: -

MediaPlayer mediaPlayer = new MediaPlayer();
                try
                {
                    if (mediaPlayer != null)
                    {
                        mediaPlayer.setDataSource(outputFile);
                        mediaPlayer.prepare();
                    }
                    mediaPlayer.start();

                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }

Но при воспроизведении обрезанного аудио я получаю исключение, которое говорит: -

setDataSourceFD failed.: status=0x80000000

Любая помощь по решению этой проблемы высоко ценится.Спасибо.

...