How can I change volume in bass.dll?

2.8k Views Asked by At

How can I change volume in bass.dll? I am programming in C#. I tried:

    public void ChangeVolume(int volume)
    {
        Bass.BASS_ChannelSetAttributes(stream, 44100, volume, 0);
    }

volume is here:

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        label4.Text = "Volume: " + trackBar1.Value.ToString();
        player.ChangeVolume(trackBar1.Value);
    }

When I try to debug, it compiles and runs. But when I try to change volume, it stops and throws "Unable to find an entry point named "Bass_ChannelSetAttributes in DLL "bass.dll". What am I doing wrong?

3

There are 3 best solutions below

0
On

Using Dumpbin.exe /exports bass.dll reveals this line in the output:

    26   19 0001BF28 BASS_ChannelSetAttribute

Note how it doesn't have an "s" at the end. Wrong [DllImport] declaration in your code, probably.

0
On

Here is an example that worked for me...

make sure you are using using System.Runtime.InteropServices;

Call the methods in the dll via a class containing:

[DllImport(BASS_lib, CallingConvention = CallingConvention.StdCall)]
internal static extern bool BASS_ChannelSetAttribute(int Handle, ChannelAttributeClass.ChannelAttribute Attribute, float Value);

Now call the method:

bool setatt = BassClass.BASS_ChannelSetAttribute(_handel, ChannelAttributeClass.ChannelAttribute.Volume, 0.1f);

Also there is an easier way using the Nuget package just search for ManagedBass

Nuget : https://www.nuget.org/packages/ManagedBass/3.1.1

Github: https://github.com/ManagedBass/ManagedBass

Example usage below:

 public partial class MainForm : Form
{
    private int _handel;

    public MainForm()
    {
        InitializeComponent();
    }

    private void StopSound()
    {
        try
        {
            // free the stream 
            BassClass.BASS_StreamFree(_handel);
            // free BASS 
            BassClass.BASS_Free();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return;
        }
    }

    private void PlaySound()
        {
            try
            {
                BassClass.BASS_Init(-1, 44100, DeviceInitFlagsClass.DeviceInitFlags.Default, IntPtr.Zero);
                _handel = BassClass.BASS_StreamCreateFile(false, @"Music\mysong.mp3", 0L, 0L, BassFlagsClass.BassFlags.Default);
                BassClass.BASS_ChannelPlay(_handel, false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }

    private void MainForm_Load(object sender, EventArgs e)
    {
      PlaySound();
    }

    private void volumeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        bool setatt = BassClass.BASS_ChannelSetAttribute(_handel, ChannelAttributeClass.ChannelAttribute.Volume, 0.1f);
    }

}
}
0
On

Have you tried BASS_SetVolume(stream,value);