Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:使用内存缓冲区作为文件_Android_Android Mediarecorder - Fatal编程技术网

Android:使用内存缓冲区作为文件

Android:使用内存缓冲区作为文件,android,android-mediarecorder,Android,Android Mediarecorder,目前,我正在使用第三方应用程序录制自行车骑行的音频,而我的应用程序则记录GPS和BLE数据。我的应用程序还可以设置标记,用于标记我在麦克风中发表评论(“备忘录”)的时间点,以便将其映射到录音 这有截图可能给你一个更好的想法,但它没有显示标记 我已经开始在我的应用程序中试用Android,我想我可以用它来取代第三方应用程序。我对它进行了一点测试,效果相当不错 现在查看MediaRecorder文档中的以下代码: MediaRecorder recorder = new MediaRecorder(

目前,我正在使用第三方应用程序录制自行车骑行的音频,而我的应用程序则记录GPS和BLE数据。我的应用程序还可以设置标记,用于标记我在麦克风中发表评论(“备忘录”)的时间点,以便将其映射到录音

这有截图可能给你一个更好的想法,但它没有显示标记

我已经开始在我的应用程序中试用Android,我想我可以用它来取代第三方应用程序。我对它进行了一点测试,效果相当不错

现在查看MediaRecorder文档中的以下代码:

MediaRecorder recorder = new MediaRecorder();
 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 recorder.setOutputFile(PATH_NAME);
 recorder.prepare();
 recorder.start();   // Recording is now started
这是有问题的一行:
recorder.setOutputFile(路径名称)

我想做的是不要记录到
路径_NAME
的文件中,而是记录到内存缓冲区中,该缓冲区必须使我能够逐字节(即每1024字节)迭代数据流,然后我将自己保存到一个文件中

我想这样做的原因是,我可以将一定数量的字节块并行保存到第二个文件中。这样,当我按下应用程序中的“备忘录”标记按钮时,它将开始将我在麦克风中所说的内容存储到一个单独的文件中,存储时间约为10秒,同时仍将完整的音频记录到主文件中。通过这种方式,我可以创建一个rss提要(或电子邮件),其中包含骑自行车过程中的所有备忘录,而不必加载整个1h+文件并跳转到标记的部分

MediaRecorder API提供以下覆盖:

void    setOutputFile(FileDescriptor fd)
void    setOutputFile(String path)
void    setOutputFile(File file)

大多数音频内容以压缩形式存储,并带有描述内容的标题(例如,比特率、压缩详细信息)。任意字节数组块在隔离状态下将不可打印。如果您将完整音频保存为具有良好实用程序支持的格式(例如MP3),您可能可以对该文件进行后期处理,以从备忘录点创建10秒的有效摘录(例如,使用
ffmpeg
)。@commonware
任意字节数组块将无法单独播放
:这取决于具体情况。例如,您可以将一个
mp3
文件随意分割,每个片段都可以自己播放。但感谢您指出这一点,因为我的目标是
aac
,而这在
aac
中似乎是不可能的。这给我带来了一个新问题:(嘿,伙计,在这个问题上有什么进展吗?我也遇到了类似的情况,但我需要在重新编码时获取视频帧,以对图像进行分析。@NatanLotério Nope。我求助于使用
android.media.AudioRecord
获取原始PCM数据,然后通过NDK用LAME对其进行编码。我希望这会更简单。Most audio内容以压缩形式存储,并带有描述内容的标题(例如,比特率、压缩详细信息)。任意字节数组块将无法单独播放。如果以具有良好实用程序支持的格式(例如,MP3)保存完整音频,您可能可以对该文件进行后期处理,以从备注点创建10秒的有效摘录(例如,使用
ffmpeg
).@commonware
任意字节数组块在隔离状态下将无法播放
:这取决于情况。例如,您可以随意将一个
mp3
文件进行切片,每个切片都可以自己播放。但感谢您指出这一点,因为我的目标是
aac
,而
aac
似乎不可能做到这一点。这给我带来了一个新问题:(嘿,伙计,在这个问题上有什么进展吗?我也遇到了类似的情况,但我需要在重新编码时获取视频帧来分析图像。@NatanLotério Nope。我求助于使用
android.media.AudioRecord
来获取原始PCM数据,然后通过NDK用LAME对其进行编码。我希望这会更容易些。