Android: 可以直接将麦克风保存到 SQLite,而不读/写临时文件吗?
Android: possible directly microphone save to SQLite, without read / write a temporary file?
我有一些关于如何记录麦克风输入的示例代码。据我了解,需要提供输出文件:
public void MediaRecorderReady(){
mediaRecorder=new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mediaRecorder.setOutputFile(AudioSavePathInDevice);
}
如果是这样的话,我觉得还有一些考虑因素,比如可用内存(不知道录音会有多少等等)。
是否有可能 Android 分配内存,并记录麦克风输入 - 收集字节到变量,并将其作为 blob 写入数据库?
另外,在播放blob场时,是否可以使用转换为.wav的方法?
由于生成文件的大小,使用 BLOB 存储音频可能会有时间限制。假设每分钟 300k,然后大约 20 分钟,由于游标 window 有 2mb 的限制,您将达到能够从存储的数据中提取的最大值。 (你可以存储大的 BLOBS,但如果不使用 SQLite3 API 的一些自定义方法而不是使用内置的 SQLiteDatabase 例程,你就无法检索它们)。
存储大数据的推荐方法是将数据存储为普通文件,然后将路径存储在数据库中。
基于Internal Versus External BLOBs in SQLite,与保存到文件系统相比,最大 100k 的 BLOBS 可以更高效地保存。
您不妨考虑 35% Faster Than The Filesystem。
关于转换为 .wav 这可能很有趣 JLayer 项目:
Java™ 平台的 MP3 decoder/player/converter 库。
我有一些关于如何记录麦克风输入的示例代码。据我了解,需要提供输出文件:
public void MediaRecorderReady(){
mediaRecorder=new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mediaRecorder.setOutputFile(AudioSavePathInDevice);
}
如果是这样的话,我觉得还有一些考虑因素,比如可用内存(不知道录音会有多少等等)。
是否有可能 Android 分配内存,并记录麦克风输入 - 收集字节到变量,并将其作为 blob 写入数据库?
另外,在播放blob场时,是否可以使用转换为.wav的方法?
由于生成文件的大小,使用 BLOB 存储音频可能会有时间限制。假设每分钟 300k,然后大约 20 分钟,由于游标 window 有 2mb 的限制,您将达到能够从存储的数据中提取的最大值。 (你可以存储大的 BLOBS,但如果不使用 SQLite3 API 的一些自定义方法而不是使用内置的 SQLiteDatabase 例程,你就无法检索它们)。
存储大数据的推荐方法是将数据存储为普通文件,然后将路径存储在数据库中。
基于Internal Versus External BLOBs in SQLite,与保存到文件系统相比,最大 100k 的 BLOBS 可以更高效地保存。
您不妨考虑 35% Faster Than The Filesystem。
关于转换为 .wav 这可能很有趣 JLayer 项目: Java™ 平台的 MP3 decoder/player/converter 库。