我想从麦克风录制音频,我希望用户能够在录制过程中添加提示点,这样当他加载文件后,他就可以轻松跳转到特定的位置。
我真的不知道我应该使用什么文件格式以及如何存储元数据(提示点)
我想过
您怎么看?
答案 0 :(得分:2)
在我看来,最好的方法是将用户提示点的SoundChannel.position保存到XML或类似的东西中。我意识到这将输出两个文件,但您也可以组成自己的专有文件类型,并将音频数据+提示点NFO写入单个文件。无论如何,我说这有几个原因。首先,为闪存找到好的MP3编码器将会有点棘手。他们中的大多数是基于炼金术,这是一种预览技术(甚至不是beta只是普通的预制技术)。它也很容易出现内存泄漏,性能低下(因为闪存编码器试图编写C / C ++通常管理不当或过载的过程),而且很难找到功能完备的功能。我也说同样最有可能适用于闪存方面的FLV / F4V编码。如果你想走这条路,那就是你最好的事情(作为一个开始):http://www.zeropointnine.com/blog/simpleflvwriteras-as3-class-to-create-flvs/
所以,如果归结为什么会让你的项目完成最快并且运行最稳定,那么请使用2文件解决方案。如果你愿意,不要误会我的意思,那里有很多半完成或基本的MP3编码解决方案(以及FLV,如上所述),但是花费时间和精力来学习这些文件格式,了解这些现有的类/框架如何工作,学习扩展它们然后稳定和调试它们。如果您想投入那段时间,请务必直接进入:http://code.google.com/p/flash-kikko/。
答案 1 :(得分:1)
一种选择是使用Base64 encoding将音频数据作为文本与cuepoint数据一起保存在XML文件中。这将是一种非常低效的存储数据的方式,并且会生成一个大文件,特别是如果它是一个长记录。但是,使用MP3编码器/解码器或some other encoder可能会有所帮助。
顺便问一下,我过去常常与Florian F.合作过吗?
答案 2 :(得分:1)
您知道WAV文件格式是否支持嵌入式CUE块?
The spec说:
The <cue-ck> cue-points chunk identifies a series of positions in
the waveform data stream. The <cue-ck> is defined as follows:
<cue-ck> -> cue( <dwCuePoints:DWORD> // Count of cue points
<cue-point>... ) // Cue-point table
<cue-point> -> struct {
DWORD dwName;
DWORD dwPosition;
FOURCC fccChunk;
DWORD dwChunkStart;
DWORD dwBlockStart;
DWORD dwSampleOffset;
}
对于具有单个数据块(标准)的WAV文件,fccChunk应为“data”,chunkStart和blockStart为0,SampleOffset为要标记的样本。
这可能是记录提示的最便携方式。