SoundPlayer не воспроизводит никакие связанные файлы звуков Windows PCM wav

В C # я не могу получить класс SoundPlayer из System.Media для воспроизведения любого wav из моей папки C: \ Windows \ Media, используя следующий код. Все, что я получаю, это без звука:

String filename = "C:\\Windows\\Media\\tada.wav";
SoundPlayer sp = new SoundPlayer(filename);
sp.Load();
sp.Play();

Я проверил волновой файл «tada.wav» с помощью программы «Gspot», которая сообщает мне, что это аудиокодек «PCM Audio». Я не получаю никаких предупреждений или ошибок компилятора, и при запуске программы не возникает никаких исключений. Я просто не слышу звука. Мои динамики включены, и я могу воспроизвести файл с помощью проигрывателя Windows Media.

Добавление wav в качестве ресурса проекта не имеет никакого значения. Может ли кто-нибудь помочь мне выяснить, почему я не могу получить звук?


person meschael    schedule 06.08.2012    source источник


Ответы (2)


Используете ли вы это как тело метода main () в консольном приложении? Приложение, вероятно, завершает работу, тем самым закрывая поток, воспроизводящий звук.

Я скопировал и вставил ваш код в основную часть нового «Консольного приложения Visual C #». Я добавил "using System.Text;" строчку в верхней части файла, скомпилировал, прошел через него, и это сработало. При запуске (без отладки) звука не было.

Если вы добавите строку:

System.Threading.Thread.Sleep (2000);

После вызова Play () приложение будет работать достаточно долго, чтобы воспроизвести звук.

person PaulPerry    schedule 06.08.2012
comment
Это был ответ, я добавил вызов сна, и проблема решена. Большое спасибо за решение этой проблемы. - person meschael; 07.08.2012
comment
Правильно, это было тело main внутри консольного приложения. - person meschael; 07.08.2012
comment
Здорово! Кроме того, вы должны убедиться, что целочисленный параметр для сна - это длина (в миллисекундах) аудиофайла. 2000 составляет 2 секунды, но вам может потребоваться изменить его для более длинных аудиофайлов. - person PaulPerry; 07.08.2012

Метод Play () воспроизводит звук отдельным потоком. То есть консольное приложение запускает новый поток, в котором воспроизводится звук. Это отлично подходит для приложений Windows, так как воспроизведение звука не останавливает основной поток Windows. В консольном приложении, когда родительский поток завершает работу, все дочерние потоки также умирают. - таким образом, нет звука.

Существует метод PlaySync (), который НЕ создает новый поток и, таким образом, поддерживает поток консольного приложения до тех пор, пока он не завершит воспроизведение вашего звука.

person SchroedingersCat    schedule 02.03.2014