Мне нужно прочитать свойства dwStart
и dwEnd
в блоке SMPL, потому что эти точки должны указывать начальную точку и конечную точку цикла в образце. Я конвертирую свои библиотеки Directwave в формат .multisample Bitwig, поэтому моему приложению не нужно воспроизводить WAV-файл. Это просто необходимо, чтобы прочитать точки цикла, поэтому он может быть добавлен в XML, который выглядит следующим образом:Как читать SMPL-фрагмент WAV-файла с помощью C#?
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<multisample name="Test Bell">
<generator>Bitwig Studio</generator>
<category>Bell</category>
<creator>John</creator>
<description>Misc</description>
<layer name="Default">
<sample file="Bell_004 - C3.wav" gain="0.00" sample-start="0.000" sample-stop="88048.000">
<key track="true" tune="0.00">
<velocity />
<loop mode="sustain" start="58709.000" stop="88048.000" />
</key>
</sample>
</layer>
</multisample>
UPDATE: Код Марк Хит работает, чтобы найти Smpl порций и петли точек в Kontakt WAVs но он не находит в Smpl кусок в WAV файлы, созданные Directwave Например этот файл: http://stash.reaper.fm/28963/Flute_006_C3.wav
Я использовал ниже код и он только нашел инст кусок. Как найти точки начала и конца петли, если нет smpl chunk?
var smp = reader.ExtraChunks.Where(ec => ec.IdentifierAsString != null);
foreach (var x in smp)
{
MessageBox.Show(x.IdentifierAsString.ToString());
}
Спасибо за решение Mark. Проверяя код на нескольких файлах Wav, я понял, что некоторые из моих Wav-файлов не имеют SMPL-фрагмента, даже если у них есть петлевые точки при загрузке в сэмплер (Bitwig/FL Studio). Я использовал _for loop_ и ** IdentifierAsString ** для итерации по набору кусков и только нашел ** "inst" **? Можно ли поставить точки петли в другой кусок? – user3441364
Конечно, есть много способов, которые точки цикла могут храниться в куске. Например, петли ACID имеют свой собственный формат фрагмента. Вам нужно будет сделать некоторые исследования/обратную инженерию, чтобы узнать, что находится внутри куска inst –