Лучший способ обработки ключевых точек в аудиофайле (с микрофона)

Я хотел бы записать звук с микрофона, и я бы хотел, чтобы пользователь мог добавлять метки во время записи, чтобы при последующей загрузке файла он мог легко перейти в определенную позицию.

Я действительно не знаю, какой формат файла мне следует использовать и как хранить метаданные (ключевые точки)

Я думал о

  1. кодирует wav/mp3 и сохраняет метаданные в файле.cue (легко сделать, но хранить 2 файла)
  2. хранение данных XMP в mp3-файле (кажется немного сложнее, но стандартные метаданные встроены в 1 файл)
  3. flv / f4v только со звуком и стандартными метками, но я не уверен, что смогу создать их прямо из клиента

Как вы думаете?

3 ответа

Решение

Знаете ли вы, что формат файла WAV поддерживает встроенные блоки CUE?

В спецификации сказано:

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 - это пример, который вы хотите пометить.

Это может быть самый портативный способ записи ваших сигналов.

На мой взгляд, лучшим способом было бы сохранить SoundChannel.position пользовательских меток в XML или что-то подобное. Я понимаю, что это выведет два файла, но вы также можете создать свой собственный тип файла и записать аудиоданные + ключевую точку NFO в один файл. Во всяком случае, я говорю это по нескольким причинам. Во-первых, поиск хороших MP3-кодеров для флеш-памяти будет немного сложнее. Большинство из них основаны на алхимии, которая является технологией предварительного просмотра (даже не бета, просто объединенная технология предварительного просмотра). Он также очень подвержен утечкам памяти, вялой производительности (поскольку флеш-кодеры, пытающиеся кодировать C/C++, обычно не справляются или перегружают процессы), и также трудно найти полнофункциональный полный. Я бы сказал, что то же самое, скорее всего, относится и к кодированию FLV/F4V на стороне флэш-памяти. Если вы хотите пойти по этому пути, это самое лучшее, что у вас есть (для начала): http://www.zeropointnine.com/blog/simpleflvwriteras-as3-class-to-create-flvs/

Так что на самом деле, если дело доходит до того, что ваш проект завершит быстрее всего и будет работать наиболее стабильно, воспользуйтесь решением с двумя файлами. Не поймите меня неправильно, если хотите, существует множество полу-готовых или базовых решений для кодирования MP3 (а также FLV, как указано выше), но для изучения этих форматов файлов потребуются затраченные время и силы, узнайте, как работают эти существующие классы / структуры, научитесь расширять их, а затем стабилизировать и отлаживать их. Если вы хотите потратить это время, непременно погрузитесь в: http://code.google.com/p/flash-kikko/.

Одним из вариантов является использование кодировки Base64 для сохранения аудиоданных в виде текста внутри файла XML вместе с данными ключевой точки. Это было бы действительно неэффективным способом хранения данных и привело бы к созданию большого файла, особенно если это была длинная запись. Однако, использование MP3-кодировщика / декодера или другого кодировщика может помочь с этим.

Кстати, тот Флориан Ф., с которым я работал?

Другие вопросы по тегам