在 Android 上录制和播放声音而不存储临时文件

Posted

技术标签:

【中文标题】在 Android 上录制和播放声音而不存储临时文件【英文标题】:Record and playback a sound on Android without storing a temporary file 【发布时间】:2012-12-07 12:45:39 【问题描述】:

在我的应用程序中,我想录制一个 2 秒长的声音并将其回放给用户。到目前为止,我发现的所有示例都要求用于播放的音频数据来自文件或 URL。

MediaPlayer 和 SoundPool 类都只接受文件、文件描述符、资源 ID 或 URL 作为输入,而不仅仅是字节数组。

由于只能将文件写入 SD 卡而不能写入内部存储(是这样吗?),因此该应用需要安装 SD 卡并且可以写入。但如果没有 SD 卡,我的应用程序也应该可以工作。

有没有办法做到这一点? 谢谢

【问题讨论】:

您的应用可以将文件写入其自己的内部数据和缓存文件夹。大文件不建议使用内部存储,请注意系统会在需要更多空间时删除缓存。 谢谢!能否请您写下您的回复作为答案,以便我接受。 【参考方案1】:

是的,应用程序可以写入内部存储(安装位置)。每个已安装的应用程序都提供了一个 Data 文件夹来写入其内部文件。还提供了缓存存储。

Context这些方法可以给你这些目录:

getCacheDir():返回文件系统上应用程序特定缓存目录的绝对路径(注意:如果缓存不足,系统可能会删除缓存

getDir(String name, int mode):检索并创建一个新目录,应用程序可以在其中放置自己的自定义数据文件。

还有一种外部存储方法:getExternalCacheDir(),但不可靠,因为外部存储可能并不总是存在。

另外,如果你只需要在App的内部数据目录中写入文件,还有一个很简单的方法:

openFileOutput (String name, int mode)

【讨论】:

太好了,以防万一有人需要这个:播放我现在使用的文件 mediaPlayer.setDataSource(openFileInput("some_file").getFD())【参考方案2】:

你可以使用 'getApplicationContext().getFilesDir().getAbsolutePath()' 获取安装应用程序的目录的路径。 一个限制是,“getFilesDir()”为您提供了文件系统上存储使用 openFileOutput(String, int) 创建的文件的目录的路径。

【讨论】:

以上是关于在 Android 上录制和播放声音而不存储临时文件的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用 audiorecord 类录制音频播放快进

在android中播放时录制声音并改变音高?

绘制录制声音时的奇怪频率

录制/播放声音时音质不佳 - Android SDK

在网页上录制、保存和播放保存的声音文件

Android录制声音文件(音频),并播放