我正在制作一个项目,该项目使用 AudioRecord API 来录制语音并对生成的 PCM-16 位数据进行一些处理。
目前我正在使用以下代码:
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)
的文档:
Returns the absolute path to the directory on the primary shared/external storage device where the application can place persistent files it owns.
假设您在手机或平板电脑上运行您的应用程序,即使您的设备没有安装 SD 卡,它也有板载存储。从您的应用的角度来看,板载存储是这种情况下的主要存储设备。
此外,我建议阅读 getExternalFilesDir
的整个文档以获得更深入的了解。
关于java - 如果没有安装 SD 卡,getExternalFilesDir() 会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735216/