我正在制作一个使用AudioRecord API录制语音并使用生成的PCM-16bit数据进行一些处理的项目。

目前,我正在使用以下代码:

private void startRecording() {

final int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize);
final byte raw_data[] = new byte[bufferSize];

final File file = new File(getExternalFilesDir(Environment.DIRECTORY_MUSIC), "test.pcm");

if (!file.mkdirs()) {
    Log.e(TAG, "Directory not created");
}
if (file.exists()) {
    file.delete();
}

recorder.startRecording();
isRecording = true;

recordingThread = new Thread(new Runnable() {
    public void run() {

        FileOutputStream os = null;
        try {
            os = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        while (isRecording) {
            int read = recorder.read(raw_data, 0, bufferSize);
            if (AudioRecord.ERROR_INVALID_OPERATION != read) {

                try {
                    os.write(raw_data);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        try {
            Log.i(TAG, "run: close file output stream !");
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}, "AudioRecorder Thread");

recordingThread.start();
}


以我的理解final File file = new FilegetExternalFilesDir(Environment.DIRECTORY_MUSIC), "test.pcm");,此行代码将创建一个名为“ test.pcm”的文件,它位于getExternalFilesDir(Environment.DIRECTORY_MUSIC)所引用的路径中。

我假设它是一个音乐文件夹,但我不了解我的Android设备当前没有安装SD或任何外部存储设备,因此该代码如何继续起作用?我仍然可以使用AudioTrack API播放语音。

由于我需要对存储的PCM文件进行一些处理,因此我想知道此文件实际存储在设备上的什么位置以及如何访问它。

提前致谢 !

最佳答案

根据getExternalFilesDir(type)的文档:


  返回应用程序可以放置其拥有的持久文件的主共享/外部存储设备上目录的绝对路径。


假设您正在手机或平板电脑上运行应用程序,即使您的设备未安装SD卡,也确实具有板载存储空间。从您的应用程序角度来看,板载存储是这种情况下的主要存储设备。

此外,我建议阅读getExternalFilesDir的整个文档以获得更深入的了解。

07-24 21:39