コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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");
            }
        }