WriteSoftSoundData の引数の意味は以下の通りです
// ソフトウエアで扱う波形データハンドルのサンプルを書き込む
// SoftSoundHandle : サンプルを書き込みたいソフトウエアで扱う波形データハンドル
// SamplePosition : サンプルを書き込む位置
// Channel1 : 書き込むサンプルの値( 左チャンネル用 )
// Channel2 : 書き込むサンプルの値( 右チャンネル用 )
int WriteSoftSoundData( int SoftSoundHandle, LONGLONG SamplePosition, int Channel1, int Channel2 ) ;
"音声の一部分を取り出して保存したい" のスレッド
https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4150
に載っている関数を使用してサウンドファイルの2秒目から12秒目までの10秒間分を抜き出して
再生するというサンプルプログラムを組んでみましたので、よろしければご覧ください m(_ _)m
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int SrcSoftSound, DstSoftSound ;
int SoundHandle ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 音を抜き出したいサウンドを読み込み
SrcSoftSound = LoadSoftSound( "SoundFile.wav" ) ;
// チャンネル数2 量子化ビット数16bit サンプリングレート44100Hz の10秒分の出力先のソフトサウンドハンドルを作成
DstSoftSound = MakeSoftSound2Ch16Bit44KHz( 44100 * 10 ) ;
// SrcSoftSound の 2秒目から12秒目までを抜き出し
for( int i = 0; i < 44100 * 10; i++ )
{
int Ch1, Ch2 ;
// 抜き出し元からサンプル値を読み出し
ReadSoftSoundData( SrcSoftSound, 44100 * 2 + i, &Ch1, &Ch2 ) ;
// 出力先にサンプル値を書き込み
WriteSoftSoundData( DstSoftSound, i, Ch1, Ch2 ) ;
}
// 抜き出したサウンドからサウンドハンドルを作成
SoundHandle = LoadSoundMemFromSoftSound( DstSoftSound ) ;
// 不要になったソフトサウンドハンドルを削除
DeleteSoftSound( SrcSoftSound ) ;
DeleteSoftSound( DstSoftSound ) ;
// 抜き出したサウンドを再生
PlaySoundMem( SoundHandle, DX_PLAYTYPE_NORMAL ) ;
// 不要になったサウンドハンドルを削除
DeleteSoundMem( SoundHandle ) ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}