private void buttonSetEnvelope_Click(object sender, EventArgs e) { if (_currentTrack.Channel != 0) { BASS_MIXER_NODE[] nodes = { new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 10d), 1f), new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 13d), 0f), new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 17d), 0f), new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 20d), 1f) }; BassMix.BASS_Mixer_ChannelSetEnvelope(_currentTrack.Channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes); // already align the envelope position to the current playback position // pause mixer Bass.BASS_ChannelLock(_mixer, true); long pos = BassMix.BASS_Mixer_ChannelGetPosition(_currentTrack.Channel); // convert source pos to mixer pos long envPos = Bass.BASS_ChannelSeconds2Bytes(_mixer, Bass.BASS_ChannelBytes2Seconds(_currentTrack.Channel, pos)); BassMix.BASS_Mixer_ChannelSetEnvelopePos(_currentTrack.Channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, envPos); // resume mixer Bass.BASS_ChannelLock(_mixer, false); // and show it in our waveform _WF.DrawVolume = WaveForm.VOLUMEDRAWTYPE.Solid; foreach (BASS_MIXER_NODE node in nodes) { _WF.AddVolumePoint(node.pos, node.val); } DrawWave(); } }
private void SetEnvelopePos(int source, long newPos) { // pause mixer Bass.BASS_ChannelLock(_mixer, true); BassMix.BASS_Mixer_ChannelSetPosition(source, newPos); // convert source pos to mixer pos long envPos = Bass.BASS_ChannelSeconds2Bytes(_mixer, Bass.BASS_ChannelBytes2Seconds(source, newPos)); BassMix.BASS_Mixer_ChannelSetEnvelopePos(source, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, envPos); // resume mixer Bass.BASS_ChannelLock(_mixer, false); }