多声道音频 - C# NAudio Winforms

问题描述

我会很直接。

目前我使用字典来注册我使用的所有声音。我开发了一些基本方法,让我可以控制何时添加声音、何时删除声音或获取所有已注册的声音。 这样做的问题是,无论我设置多少音量,它都不会被修改,例如,我无法正确处理 10% 的音量和 50% 的另一个声音。我按照系统音量什么都有。

如何正确调节音量?

是否有任何 NAudio 实用程序允许我创建多个具有独立音量的通道并在必要时播放它们?

public void AddSound(string soundName,string path,float volume,bool infiniteLoop = false) 
{
    if (File.Exists(path))
    {
        if (new FileInfo(path).Extension.Trim().toupper().Contains("MP3"))
        {
            if (!sounds.ContainsKey(soundName) && !soundFileReader.ContainsKey(soundName))
            {
                IWavePlayer waveOutDevice = new WaveOut();
                AudioFileReader audioFileReader = new AudioFileReader(path);
    
                SampleChannel sampleChannel = new SampleChannel(audioFileReader);
                sampleChannel.volume = volume;
                waveOutDevice.Init(sampleChannel);
                sounds.Add(soundName,waveOutDevice);
                soundFileReader.Add(soundName,audioFileReader);
            }
        }
    }
}
    
public async void PlaySoundAsync(string soundName) 
{
    await Task.Run(() => {
        if (sounds.ContainsKey(soundName) && soundFileReader.ContainsKey(soundName))
        {
            IWavePlayer wave = sounds[soundName];
            wave.Play();
        }
    });
}
    
public void RemoveSoundByName(string soundName)
{
    if (sounds.ContainsKey(soundName) && soundFileReader.ContainsKey(soundName))
    {
        IWavePlayer wave = sounds[soundName];
        AudioFileReader audioFileReader = soundFileReader[soundName];
                    
        wave.Stop();
        audioFileReader.dispose();
        wave.dispose();
    
        sounds.Remove(soundName);
        soundFileReader.Remove(soundName);
    }
}
    
public List<string> ListSounds()
{
    List<string> soundList = new List<string>();
    
    foreach (string key in sounds.Keys)
    {
        soundList.Add(key);
    }
    
    return soundList;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)