【发布时间】:2014-03-28 12:45:17
【问题描述】:
我正在用 C# 编写控制台应用程序,我想在连续显示文本时播放声音。这就是我所做的:
static SoundPlayer typewriter = new SoundPlayer("typewriter");
static public void print(string str, int delay)
{
Thread skipThread = new Thread(skipText);
typewriter.PlayLooping();
textgap = delay;
foreach (char c in str)
{
Console.Write(c);
if (textgap != 0)
Thread.Sleep(textgap);
}
typewriter.Stop();
}
typewriter.wav 被导入到我的项目中,位于.cs 文件旁边,并且我选择了copy always。当我运行此代码时,开始播放声音时会弹出一个错误说Please be sure a sound file exists at the specified location.
这里有什么问题?
编辑: 根据 Kevin J 的回答将我的代码更改为以下内容。
static SoundPlayer typewritter;
public static void Load()
{
Assembly assembly;
assembly = Assembly.GetExecutingAssembly();
typewritter = new SoundPlayer(assembly.GetManifestResourceStream
("typewriter"));
}
我也应该精确使用路径Environment.CurruntDirectory + "typewriter",但没有任何变化。
【问题讨论】:
-
它是否将文件与可执行文件放在同一文件夹中?
-
@DStanley 是的,确实如此。
-
除非您已将 .wav 文件作为资源导入,否则您需要为 SoundPlayer 指定 .wav 文件的确切路径。即
SoundPlayer player = new SoundPlayer("C:\\bass.wav"))。您上面的代码似乎没有完整路径。 -
查看您的新代码,您没有为
assembly.GetManifestResourceStream放置正确的资源标识符。它应该类似于“Yournamespace.typewriter.wav”。你只有“打字机”。您必须使用应用程序的命名空间和正确的文件名来限定资源。 “打字机”不是 .wav 文件的正确名称。 -
@KevinJ 我不能将“mynamespace.typewriter.wav”作为函数的参数,因为它说没有定义打字机。
标签: c# audio console console-application soundplayer