使用 Android SDK 从原始 PCM 数据创建 WAV 文件
Posted
技术标签:
【中文标题】使用 Android SDK 从原始 PCM 数据创建 WAV 文件【英文标题】:Creating a WAV file from raw PCM data using the Android SDK 【发布时间】:2011-06-14 05:07:11 【问题描述】:我正在尝试使用 AudioRecord 类来录制 WAV 文件。问题是它只提供原始 PCM 数据,如果我将它写入文件,没有标题信息,所以它不会在任何媒体播放器中播放。如何从这些原始数据创建 WAV 文件?
或者,有没有其他方法可以将 android 中的声音录制到 WAV 文件(或 MP3)?
哦,我知道 MediaRecorder 不能使用,因为它不支持 WAV 或 MP3 格式。
【问题讨论】:
哦...我已经尝试在 android 中读取原始 PCM 数据...能否请您发布您正在使用的代码? 【参考方案1】:你可能想使用 mediarecord 类
【讨论】:
为什么?它不支持 WAV 或 MP3 输出【参考方案2】:好的,我已经弄清楚了。这篇文章对帮助我至关重要: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java
基本上,我使用 ByteArrayOutputStream 从 AudioRecord 写入原始 PCM 数据,然后在处理完成后让我获取字节数组及其大小。然后,我可以将该数据与 SampleRate、BitRate 和 Stereo/Mono 设置结合使用,按照上面的链接创建 WAV 标头。生成的文件完美运行!
【讨论】:
您能否展示一个示例代码,您是如何做到这一点的。我有类似的要求 您能告诉我您是如何在代码中使用 wavIo 文件的吗?主要有两种方法,读取和保存。我正在使用 AudioRecord 类在 android 中录制音频。我正在逐字节写入数据。由于我的音频没有正确录制,请您帮忙。 链接已损坏。您仍然可以访问此代码或说明解决方案的示例吗?【参考方案3】:检查MediaRecorder.setOutputFormat(),你可以为你的录音设置不同的容器格式;有 MediaRecorder.OutputFormat.MPEG_4 和 MediaRecorder.OutputFormat.THREE_GPP; RAW 中唯一允许的格式是 setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
抱歉,MP3 不可用。你真的需要mp3来录音吗? 与 MP3 相对的 WAV 是一个容器,而不是一个格式; WAV 可以是任何一种编码格式。
您始终可以在原始 pcm 数据前添加一些 WAV RIFF 标头(只要您确切知道格式)。在此处查看它的外观: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
【讨论】:
我绝对需要输出文件是 WAV(PCM 编码)或 MP3。它被上传到的服务需要这个。所以,据我所知,我不能使用 MediaRecorder。我也是 我绝对需要输出文件是 WAV(PCM 编码)或 MP3。它被上传到的服务需要这个。所以,据我所知,我不能使用 MediaRecorder。我在所有低级的东西上也很糟糕,所以我不知道我自己在创建heade方面会有多好。没有这个能力的java包吗? 我实际上发现了这个:computermusicblog.com/blog/2008/08/29/…,这使得它更容易工作。但我不确定如何获取字节 40 的 datat 块的大小。我将原始 PCM 数据写入文件,那么它只是该文件的大小吗?以上是关于使用 Android SDK 从原始 PCM 数据创建 WAV 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Core Audio 从 PCM 原始数据中获取电平值
使用 CoreAudio 中的 AudioQueue 从网络播放原始 pcm