0
我需要读取SMPL块内的dwStart
和dwEnd
属性,因为这些点应指定样本中循环的起点和终点。 我将我的Directwave库转换为Bitwig的.multisample格式,所以我的应用程序不需要播放WAV文件。它只是需要读取循环点,因此它可以被添加到看起来像这样的XML:如何用C#读取WAV文件的SMPL块?
<?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: 马克·希思的代码工作找到KONTAKT WAV文件的SMPL块和循环点但它并没有发现由DirectWave创建例如这个文件中的WAV文件的SMPL块: http://stash.reaper.fm/28963/Flute_006_C3.wav
我用下面的代码,而且只发现了一个研究所块。如果没有smpl块,我如何找到开始和结束循环点?
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循环有它们自己的块格式。你需要做一些研究/反向工程来找出一个块内的东西 –