Воспроизведение звуков на консоли - C#
Я пишу консольное приложение на 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.
Что здесь не так?
РЕДАКТИРОВАТЬ: изменил мой код в соответствии с ответом Кевина Дж.
static SoundPlayer typewritter;
public static void Load()
{
Assembly assembly;
assembly = Assembly.GetExecutingAssembly();
typewritter = new SoundPlayer(assembly.GetManifestResourceStream
("typewriter"));
}
Я также должен уточнить, чтобы использовать путь Environment.CurruntDirectory + "typewriter"
но ничего не меняется.
3 ответа
Разобрался с проблемой: мне просто нужно было установить SoundLocation
собственность SoundPlayer
пример:
SoundPlayer typewriter = new SoundPlayer();
typewriter.SoundLocation = Environment.CurrentDirectory + "/typewriter.wav";
Вот кое-что, что может вам помочь (обратите внимание, что этот код предназначен для приложения winforms, но вы должны иметь возможность преобразовать его в консольное приложение. Просто изучите код, чтобы увидеть, как он работает) В основном вы добавите.wav файл как "ресурс" для вашей программы. Затем ваша программа может получить доступ к WAV-файлу и воспроизвести его:
using System.Reflection;
using System.IO;
using System.Resources;
using System.Media;
using System.Diagnostics;
namespace Yournamespace
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Assembly assembly;
Stream soundStream;
SoundPlayer sp;
assembly = Assembly.GetExecutingAssembly();
sp = new SoundPlayer(assembly.GetManifestResourceStream
("Yournamespace.Dreamer.wav"));
sp.Play();
}
}
}
Если, например, у вас есть звуки в папке "Ресурсы", тогда подпапка "SoundClips" делает это следующим образом.
var soundLocation = Environment.CurrentDirectory + @"\Assets\SoundClips\";
SoundPlayer player = new SoundPlayer
{
SoundLocation = soundLocation + "typewriter.wav",
};
Убедитесь, что у вас установлены свойства файла:
построить действие - Содержание
копировать в выходной каталог - копировать, если новее