初めまして。
ThbgmExtractor version 1.4 beta2のソースをダウンロードさせて頂きました。
個人的な用途で使うソフトを作るのに、
c#で音楽ファイルの区間リピート再生できるソースを探していたので、大変助かりました。
特にalsaにまで対応しているのでありがたいです。
ところで、使わせていただく過程でバグを発見したので報告させて頂きます。
すでに修正済みの場合はご容赦下さい。
デフォルトの設定で複数曲出力すれば容易に再現します。
ファイル出力で出力されたファイルのWAVEデータ(dataチャンク)の末尾に
数バイトのゴミデータが付加されています。
原因は、EffectAppliedBgmStreamのLengthのgetのTimeSpanからのサイズ計算に誤差が発生し、
間違ったサイズのデータを出力しているようです。
試しに、データサイズが4の倍数になるように
- return (long)(base.Format.BytesPerSecond * (effect.FadingStart + effect.FadingLength + effect.TrailingSilenceLength).TotalSeconds);
+ return (long)(base.Format.BytesPerSecond * (effect.FadingStart + effect.FadingLength + effect.TrailingSilenceLength).TotalSeconds) / 4 * 4;
というコードに変更すると、現象が発生しなくなります。
- Smdn.Interop.WinMM.PcmStreamPlayerのVolumeが、setした値とgetした値で食い違う (Windows)
ThbgmExtractorには使用されていないので、ソース上のみのバグです。
次のソースで再現します。
Smdn.Media.PcmStreamPlayer player = Smdn.Media.PcmStreamPlayer.Create();
player.Volume= 50;
int v = player.Volume; // vには49が入る
原因は、PcmStreamPlayerのVolumeのgetの整数同士の計算で誤差が発生しているようです。
試しに、次のように
- return 100 * (vol.Left - WaveOutVolume.Min.Left) / (WaveOutVolume.Max.Left - WaveOutVolume.Min.Left);
+ return (int)Math.Round(100 * (vol.Left - WaveOutVolume.Min.Left) / (double)(WaveOutVolume.Max.Left - WaveOutVolume.Min.Left));
doubleで計算してRoundすると発生しなくなります。