【问题标题】:NAudio Volume ChangingNAudio 音量变化
【发布时间】:2012-01-20 18:43:24
【问题描述】:
class Sound
{

    private NAudio.Wave.BlockAlignReductionStream stream = null;
    private NAudio.Wave.DirectSoundOut output = null;
    private string fileName;

    public Sound(string fileName)
    {

        this.fileName = fileName;

    }
    public void PlaySound()
    {

        if(fileName.EndsWith(".mp3"))
        {
        NAudio.Wave.WaveStream pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(fileName));
        stream = new NAudio.Wave.BlockAlignReductionStream(pcm);

        }
        else if (fileName.EndsWith(".wav"))
        {
            NAudio.Wave.WaveStream pcm = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(fileName));
            stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
        }
        else throw new InvalidOperationException("Not a correct audio file type.");

        output = new NAudio.Wave.DirectSoundOut();
        output.Init(stream);
        output.Play();
        output.Volume = 0.5f;
    }
    public void Volume(float vol)
    {

    }
    public void PausePlay()
    {
        if (output != null)
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Pause();
            else if (output.PlaybackState == NAudio.Wave.PlaybackState.Paused) output.Play();
        }
    }
    public void Pause()
    {
        if (output != null)
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Pause();
        }
    }
    public void Play()
    {
        if (output != null)
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Paused) output.Play();
        }
    }
    public void DisposeWave()
    {
        if (output != null)
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Stop();
            output.Dispose();
            output = null;
        }
        if (stream != null)
        {
            stream.Dispose();
            stream = null;
        }
    }
    public bool Over()
    {
        if (stream.Position == stream.Length)
            return true;
        return false;
    }
    public void Loop()
    {

        if (Over())
        {
            stream.Position = 0;
            output.Play();

        }

    }

我真的不知道这里有什么问题,我很乐意提供帮助,我正在尝试更改输出音频的音量。 当我编译这段代码时,output.volume = 0.5 出现错误。错误是:

DirectSoundOut 不支持设置音量,请改为调整 WaveProvider 的音量。

【问题讨论】:

  • +1 for new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(fileName)) 技巧,它帮助我在使用 Mp3FileReader(它本身不包含此属性)时访问 Volume 属性。

标签: c# naudio


【解决方案1】:

这意味着,请改用 WaveChannel32 上的 Volume 属性。此外,除非您使用的是旧版本的 NAudio,否则 BlockAlignReductionStreamWaveFormatConversion 流是不必要的,因为 MP3FileReader 会发出 PCM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多