处理音频文件中提示点的最佳方法(来自麦克风)

时间:2011-03-30 14:21:57

标签: flash air metadata microphone cue

我想从麦克风录制音频,我希望用户能够在录制过程中添加提示点,这样当他加载文件后,他就可以轻松跳转到特定的位置。

我真的不知道我应该使用什么文件格式以及如何存储元数据(提示点)

我想过

  1. 编码wav / mp3并将元数据存储在.cue文件中(很容易做到2个文件存储)
  2. 将XMP数据存储在mp3文件中(似乎有点困难,但标准元数据嵌入在1个文件中)
  3. flv / f4v仅提供音频和标准提示点,但我不确定我是否可以直接从客户端创建
  4. 您怎么看?

3 个答案:

答案 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为要标记的样本。

这可能是记录提示的最便携方式。