[英]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.