Я делаю проект, который использует 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");
я понимаю, 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
чтобы получить более глубокое понимание.