/// <summary> /// Sets the replay gain for a channel. /// </summary> /// <param name="audioStream">The audio stream.</param> private static void SetReplayGain(AudioStream audioStream) { if (audioStream == null || !audioStream.IsAudioLoaded()) { throw new Exception("Audio file null or not audio not loaded"); } if (!audioStream.IsGainChannelInitialized() && audioStream.Gain == 0) { return; } var volume = DecibelToPercent(audioStream.Gain); // DebugHelper.WriteLine("SetReplayGain for " + audioStream + " to " + volume); if (!audioStream.IsGainChannelInitialized()) { audioStream.GainChannel = Bass.BASS_ChannelSetFX(audioStream.ChannelId, BASSFXType.BASS_FX_BFX_VOLUME, int.MaxValue); } var volumeParameters = new BASS_BFX_VOLUME(volume, BASSFXChan.BASS_BFX_CHANALL); Bass.BASS_FXSetParameters(audioStream.GainChannel, volumeParameters); }
private void PrepareChannelsToSplit(int index, IList <int> ArrangedChannels, int channels, float vol, string file, MoggSplitFormat format, string quality, bool slave = true) { var channel_map = new int[channels == 2 ? 3 : 2]; channel_map[0] = ArrangedChannels[index]; channel_map[1] = channels == 2 ? ArrangedChannels[index + 1] : -1; if (channels == 2) { channel_map[2] = -1; } var flags = slave ? BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SPLIT_SLAVE : BASSFlag.BASS_STREAM_DECODE; var out_stream = BassMix.BASS_Split_StreamCreate(SourceStream, flags, channel_map); var volumeFX = Bass.BASS_ChannelSetFX(out_stream, BASSFXType.BASS_FX_BFX_VOLUME, 0); var volume = new BASS_BFX_VOLUME { lChannel = 0, fVolume = vol }; Bass.BASS_FXSetParameters(volumeFX, volume); Splits.Add(out_stream); if (format == MoggSplitFormat.OGG) { var cmd = "bin\\oggenc2.exe -q" + quality + " - -o\"" + file + "\""; BassEnc.BASS_Encode_Start(out_stream, cmd, BASSEncode.BASS_ENCODE_FP_24BIT | BASSEncode.BASS_ENCODE_AUTOFREE, null, IntPtr.Zero); } else { BassEnc.BASS_Encode_Start(out_stream, file, BASSEncode.BASS_ENCODE_PCM | BASSEncode.BASS_ENCODE_AUTOFREE, null, IntPtr.Zero); } }
/// <summary> /// Sets the replay gain for a channel. /// </summary> /// <param name="channel">The channel.</param> /// <param name="gain">The gain.</param> public static void SetReplayGain(int channel, float gain) { if (gain == 0) { return; } if (channel == int.MinValue) { return; } // DebugHelper.WriteLine("SetReplayGain " + gain); var fxChannel = Bass.BASS_ChannelSetFX(channel, BASSFXType.BASS_FX_BFX_VOLUME, int.MaxValue); var volume = DecibelToPercent(gain); var volumeParameters = new BASS_BFX_VOLUME(volume, BASSFXChan.BASS_BFX_CHANALL); Bass.BASS_FXSetParameters(fxChannel, volumeParameters); }
public void Init(int handle) { try { m_handle = handle; if (m_isEnabled) { if (handle != -1) { BASS_BFX_PEAKEQ eq = new BASS_BFX_PEAKEQ(); BASS_BFX_COMPRESSOR2 comp = new BASS_BFX_COMPRESSOR2(); BASS_BFX_VOLUME preamp = new BASS_BFX_VOLUME(); m_bandValue = new BandValue(); // int compVal = Bass.BASS_ChannelSetFX(handle, BASSFXType.BASS_FX_BFX_COMPRESSOR2, 0); // comp.lChannel = BASSFXChan.BASS_BFX_CHANALL; //comp.fGain = 7.0f; //comp.fAttack = 24.9f; //comp.fRelease = 99.9f; //comp.fThreshold = -11.0f; //comp.fRatio = 4f; // Bass.BASS_FXSetParameters(compVal, comp); m_bandValue.Handle = Bass.BASS_ChannelSetFX(handle, BASSFXType.BASS_FX_BFX_PEAKEQ, 5); if (m_dsp_gain != null) { m_dsp_gain.Dispose(); } m_dsp_gain = new DSP_Gain(handle, 6); m_dsp_gain.Gain_dBV = ArrBandValue[10].PreAmp / 10; // m_preampHandle = Bass.BASS_ChannelSetFX(handle, BASSFXType.BASS_FX_BFX_VOLUME, 6); // preamp.lChannel = BASSFXChan.BASS_BFX_CHANNONE; // preamp.fVolume = (float)Math.Pow(10, (ArrBandValue[10].PreAmp / 10) / 20); //ArrBandValue[10].PreAmp; // Bass.BASS_FXSetParameters(m_preampHandle, preamp); // m_handle = handle; eq.fQ = 0f; eq.fBandwidth = 0.6f; eq.lChannel = BASSFXChan.BASS_BFX_CHANALL; for (int i = 0; i < m_centers.Length; i++) { eq.lBand = i; eq.fCenter = m_centers[i]; Bass.BASS_FXSetParameters(m_bandValue.Handle, eq); float gain = ArrBandValue[i].Gain; UpdateEQBass(i, gain); Console.WriteLine(m_bandValue.Handle + " : " + gain + " : " + i); } } else { if (m_equalizer != null) { m_equalizer.Dispose(); } m_equalizer = new Implementation.Equalizer(); // m_equalizer.Preamp = ArrBandValue[10].PreAmp / 10; for (int i = 0; i < m_centers.Length; i++) { float gain = ArrBandValue[i].Gain; UpdateEQVlc(i, gain); } // m_handle = handle; m_bandValue.Handle = -1; } } } catch (Exception ex) { Logger.LogFile(ex.Message, "", "Init", ex.LineNumber(), "Equalizer Class"); } }