音声の編集について(カット編集)
LSMPM 2015/11/15(Sun) 19:58
Reputeless 2015/11/16(Mon) 23:52
Wave::operator[index] で、連続したサンプルデータから任意の位置のサンプルを取得できるので、以下のようなコードで Wave の一部のコピーが実現できます。
# include <Siv3D.hpp>
Wave Copy(const Wave& src, size_t from, size_t length)
{
if (from + length > src.lengthSample)
{
return Wave();
}
Wave wave(length);
::memcpy(&wave[0], &src[from], sizeof(WaveSample) * length);
return wave;
}
void Main()
{
// 44100*10 サンプル目から 44100*10 サンプル分コピー
const Sound sound(Copy(Wave(L"Example/風の丘.mp3"), 44100 * 10, 44100 * 10));
sound.play();
while (System::Update())
{
}
}
Wave::resize() 等と組み合わせれば、サンプルの一部削除も可能になるでしょう。
次期バージョンでは
Wave wave(src.begin(), src.begin()+44100, src.samplingRate);
といったように、部分コピーを容易にできる API を提供したいと思います。
LSMPM 2015/11/17(Tue) 00:38