我正在制作一个使用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
的整个文档以获得更深入的了解。