Воспроизведение звуков на консоли - 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",
};

Убедитесь, что у вас установлены свойства файла:

построить действие - Содержание

копировать в выходной каталог - копировать, если новее

Другие вопросы по тегам