Я ищу пример кода, чтобы показать мне, как добавить метаданные в создаваемые нами wav-файлы. Кто-нибудь?Как добавить метаданные в WAV-файл?
ответ
Если вы изучите wave file spec, вы увидите, что не существует места для аннотаций любого вида. Вариант будет состоять в том, чтобы обернуть волновой файл своим собственным форматом, который содержит настраиваемую информацию, но вы фактически создадите совершенно новый формат, который не будет доступен для чтения пользователям, у которых нет вашего приложения. Но с тобой все в порядке.
Возможно, формат NIST файла даст вам то, что вы хотите: NIST
Вот Lib, которые могли бы помочь, но я боюсь, что выглядит старым. NIST Lib
Невозможно найти более полезную информацию прямо сейчас, как именно ее использовать, и я боюсь, что информационные документы от моей компании должны оставаться там. : L/
Один из вариантов - добавить свой собственный кусок с уникальным идентификатором. Большинство игроков WAV игнорируют это.
Еще одна идея - использовать фрагмент labl
, связанный с набором, установленным в начале или в конце файла. Вам также понадобится кусок que
. See here for a reference
Как написать данные просто
- Написать
"RIFF"
. - сохранить позицию файла.
- Напишите 4 байта 0's
- Напишите все существующие куски. Хранить количество записанных байтов.
- Добавьте свой кусок. Не забудьте получить право. Храните количество записанных байтов.
- перемотка назад в сохраненное положение. Напишите новый размер (в виде 32-разрядного номера ).
- Закрыть файл.
Это немного сложнее, если вы добавляете вещи в существующий кусок list
, но тот же принцип применяется.
Помните, что все куски должны иметь четное количество байтов. Pad с NULL, если необходимо! – mivk
Try код ниже
private void WaveTag()
{
string fileName = "in.wav";
WaveReadWriter wrw = new WaveReadWriter(File.Open(fileName, FileMode.Open, FileAccess.ReadWrite));
//removes INFO tags from audio stream
wrw.WriteInfoTag(null);
//writes INFO tags into audio stream
Dictionary<WaveInfo, string> tag = new Dictionary<WaveInfo, string>();
tag[WaveInfo.Comments] = "Comments...";
wrw.WriteInfoTag(tag);
wrw.Close();
//reads INFO tags from audio stream
WaveReader wr = new WaveReader(File.OpenRead(fileName));
Dictionary<WaveInfo, string> dir = wr.ReadInfoTag();
wr.Close();
if (dir.Count > 0)
{
foreach (string val in dir.Values)
{
Console.WriteLine(val);
}
}
}
http://alvas.net/alvas.audio,articles.aspx#id3-tags-for-wave-files из
Этот код нельзя использовать без лицензии «Alvas Audio», потребуется минимум $ 500 лицензия ... –
Из того, что я прочитал, я могу вставить его как часть структуры RIFF, я просто не могу понять, какие структуры и теги использовать , – Curtis