代码之家  ›  专栏  ›  技术社区  ›  Daniel F

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

  •  0
  • Daniel F  · 技术社区  · 5 年前

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

    这个 GitHub issue 它有截图可以给你一个更好的主意,但它不显示标记。

    我已经开始尝试安卓系统 MediaRecorder API 在我的应用程序中,我想我可以用它来代替第三方应用程序。我测试了一下,效果相当不错。

    现在查看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(PATH_NAME); .

    我想做的是不要在 PATH_NAME ,但是进入一个内存缓冲区,它必须使我能够在数据流上迭代,逐字节chuck(即每1024字节),然后我将自己保存到一个文件中。

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

    MediaRecorder API提供以下重写:

    void    setOutputFile(FileDescriptor fd)
    void    setOutputFile(String path)
    void    setOutputFile(File file)
    
    0 回复  |  直到 5 年前