キーを押したときに音を鳴らすアプリを作っているのですが、キーを離すとすぐに音が止まります。
私が見つけた問題は、キーを押すと最初のミリ秒が再生され、キーを離すまで無限ループすることです。
現在使用しているコードは次のとおりです。
public class Foo
{
public static int GetStream1(string path)
{
return Bass.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
}
public static int GetStream2(string path)
{
return Bass.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
}
}
protected override void OnKeyDown(KeyEventArgs e)
{
Bass.BASS_Init(1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
Bass.BASS_Init(2, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle);
if (e.KeyCode == Keys.D1)
{
if (beatload1.Text == "Waiting 01.wav")
{
MessageBox.Show("No beat loaded");
return;
}
Beat1.Image = Beatpadpc.Properties.Resources.white_square_button;
try
{
Bass.BASS_SetDevice(1);
Bass.BASS_ChannelPlay(Foo.GetStream1(path1.Text), false);
}
catch (FileNotFoundException)
{
MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
}
}
if (e.KeyCode == Keys.D2)
{
if (beatload2.Text == "Waiting 02.wav")
{
MessageBox.Show("No beat loaded");
return;
}
Beat2.Image = Beatpadpc.Properties.Resources.white_square_button;
try
{
Bass.BASS_SetDevice(2);
Bass.BASS_ChannelPlay(Foo.GetStream2(path2.Text), false);
}
catch (FileNotFoundException)
{
MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
}
}
}
private void Window_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D1)
{
Beat1.Image = Beatpadpc.Properties.Resources.black_square_button;
Bass.BASS_StreamFree(Foo.GetStream1(path1.Text));
Bass.BASS_SetDevice(1);
Bass.BASS_Free();
}
if (e.KeyCode == Keys.D2)
{
Beat2.Image = Beatpadpc.Properties.Resources.black_square_button;
Bass.BASS_StreamFree(Foo.GetStream2(path2.Text));
Bass.BASS_SetDevice(2);
Bass.BASS_Free();
}
}
では、1 つ以上のサウンドを同時に再生する方法はありますか?