如何更改 bass.dll 中的音量?

发布于 2024-09-14 18:39:25 字数 517 浏览 2 评论 0原文

如何更改 bass.dll 中的音量?我正在用 C# 编程。我尝试过:

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

卷在这里:

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

当我尝试调试时,它会编译并运行。但是,当我尝试更改音量时,它会停止并抛出“无法在 DLL“bass.dll”中找到名为“Bass_ChannelSetAttributes”的入口点。我做错了什么?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

老街孤人 2024-09-21 18:39:25

使用 Dumpbin.exe /exports bass.dll 会在输出中显示这一行:

    26   19 0001BF28 BASS_ChannelSetAttribute

请注意它末尾没有“s”。您的代码中的 [DllImport] 声明可能错误。

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.

岁月打碎记忆 2024-09-21 18:39:25

您是否尝试过BASS_SetVolume(stream,value);

Have you tried BASS_SetVolume(stream,value);

七月上 2024-09-21 18:39:25

这是一个对我有用的示例...

确保您正在使用 using System.Runtime.InteropServices;

通过包含以下内容的类调用 dll 中的方法:

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

现在调用该方法:

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

另外还有一个使用 Nuget 包的更简单方法只需搜索 ManagedBass

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

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

下面的示例用法:

 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);
    }

}
}

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);
    }

}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文