我正在制作一个使用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文件进行一些处理,因此我想知道该文件实际存储在设备中的什么位置以及如何访问它。
预先感谢!
答案 0 :(得分:1)
根据getExternalFilesDir(type)
的文档:
将绝对路径返回到主共享/外部存储设备上目录的绝对路径,应用程序可以在该目录中放置其拥有的永久文件。
假设您正在手机或平板电脑上运行应用程序,即使您的设备未安装SD卡,它也具有板载存储空间。从您的应用程序的角度来看,板载存储是这种情况下的主要存储设备。
此外,我建议阅读getExternalFilesDir
的整个文档,以获取更深入的了解。