簡體   English   中英

如何在 C# 控制台應用程序中使用音效?

[英]How can I use sound effect in C# console app?

我在 C# 控制台應用程序中做這個小型 RPG 游戲,我想在選擇菜單選項時添加一些背景音樂和效果。

我注意到當背景音樂開始播放時我什么也做不了。 我想到了線程,但這對我來說是全新的(6 周前開始學習 C#)。

我設法做的是開始一個新線程並播放聲音

static Thread backgroundMusic = new Thread(() =>
    {

        using (var audioFile = new AudioFileReader(AppDomain.CurrentDomain.BaseDirectory + "\\menu.mp3"))
        using (var outputDevice = new WaveOutEvent())
        {
            backgroundMusic.IsBackground = true;
            outputDevice.Init(audioFile);
            outputDevice.Play();
            while (true)
            {
                Thread.Sleep(1);
            }

        }
    });

然后我做的聲音效果...

static Thread click = new Thread(() =>
    {

        using (var audioFile = new AudioFileReader(AppDomain.CurrentDomain.BaseDirectory + "\\click.mp3"))
        using (var outputDevice = new WaveOutEvent())
        {
            click.IsBackground = true;
            outputDevice.Init(audioFile);
            outputDevice.Play();
            while (true)
            {
                Thread.Sleep(1);
            }
        }
    });

我從 click.Start(); 開始。 背景音樂.Start();

好的,到目前為止一切都很好。 它播放背景音樂和播放音效,但只有一次。 Can I reuse the thread in some way to play the click sound again when another option is chosen? 我可以以某種方式中止聲音嗎? 當你玩游戲和菜單時,我可能想要不同的音樂。

試過 backgroundMusic.Abort(); 但后來我得到了這個:

System.PlatformNotSupportedException: 'Thread abort is not supported on this platform.'

一旦我啟動了一次線程,我就無法重新啟動它。 我試過 backgroundMusic.Start();

我一直在查看論壇,但似乎都涵蓋了 windows forms,而不是使用控制台應用程序。

https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread?view=net-5.0我還檢查了文檔...但老實說,我認為微軟的文檔不是給菜鳥的。 我覺得很難理解。

我可能一直做錯了,所以不要對我太苛刻,但請提出如何改進的建議。

所以我想要: 播放和循環播放背景音樂 每次選擇菜單選項時單擊聲音

我有:背景音樂播放一次(直到文件末尾)單擊第一個菜單選項上的聲音,然后引發異常(見上文)

你永遠不應該使用Thread.Abort() 它只是以一種“邪惡”的方式停止線程——通過拋出異常,你永遠不知道會有什么副作用。

你需要CancellationToken 查看這篇文章: https://docs.microsoft.com/en-us/dotnet/standard/threading/cancellation-in-managed-threads

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM