Wpf звук ошибки

Подскажите, возможно ли в wfp приложении проигрывать системные звуки?

Я хочу реализовать следующее: при определенном событии появляется отображается предупреждение и проигрывается системный звук «Windows Notify».

задан 15 апр 2011 в 9:02

Jones's user avatar

1

Конечно возможно. Только набор звуков не очень то велик:

 System.Media.SystemSounds.Asterisk.Play();
 System.Media.SystemSounds.Beep.Play();
 System.Media.SystemSounds.Exclamation.Play();
 System.Media.SystemSounds.Hand.Play();
 System.Media.SystemSounds.Question.Play();

Для проигрывания каких либо других звуков(только WAWE)используй:

System.Media.SoundPlayer

ответ дан 15 апр 2011 в 18:06

Денис Зимбулатов's user avatar

4

29 / 29 / 8

Регистрация: 28.01.2013

Сообщений: 211

1

Воспроизведение звука

03.04.2013, 16:48. Показов 16768. Ответов 12


Студворк — интернет-сервис помощи студентам

Доброго времени суток всем! Подскажите пожалуйста, как в WPF воспроизвести несколько звуков одновременно?
Т.е. есть фоновый звук, который начинает играть при запуске и при нажатии на кнопку, воспроизводится другой звук, но при этом не прерывает воспроизведение фона. во как))



0



Casper-SC

Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

04.04.2013, 09:28

2

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Windows;
using System.Windows.Media;
 
namespace Wpf_Sound
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private MediaPlayer _mpBgr;
        private MediaPlayer _mpCurSound;
 
        public MainWindow()
        {
            InitializeComponent();
            _mpBgr = new MediaPlayer();          
            _mpCurSound = new MediaPlayer();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _mpBgr.Open(new Uri(@"D:МузыкаMoonbeam – Moon Magic 050 (December 2012).mp3", UriKind.Absolute));
            _mpBgr.Play();
            _mpBgr.Position = TimeSpan.FromMinutes(11.45);
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            _mpCurSound.Open(new Uri(@"D:ПрочееЗвукиGryphonRiderPissed1.wav", UriKind.Absolute));
            _mpCurSound.Play();
        }
    }
}



0



29 / 29 / 8

Регистрация: 28.01.2013

Сообщений: 211

04.04.2013, 10:40

 [ТС]

3

Casper-SC, спасибо большое, попробую.

Добавлено через 24 минуты
Casper-SC, Сделал все именно так, ошибки не вылетает, но звук не воспроизводится)



0



Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

04.04.2013, 10:52

4

Цитата
Сообщение от Eclipze
Посмотреть сообщение

Casper-SC, Сделал все именно так, ошибки не вылетает, но звук не воспроизводится)

По-ка-жи код… Не факт что сделал прям всё именно так и пути правильно указал и прочее.

Добавлено через 1 минуту
Без кода я просто прочитал тот факт, что у тебя не работает и закрыл вкладку, а ты так будешь ждать помощи до второго пришествия. Просто я не закрыл вкладку . Устал уже повторять про код. И не огрызок, а чтобы было понятно, что откуда вызывается.

Добавлено через 3 минуты
Может у тебя звук на колонках выключен или дрова на звук не стоят



0



Eclipze

29 / 29 / 8

Регистрация: 28.01.2013

Сообщений: 211

04.04.2013, 10:54

 [ТС]

5

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Media;
using System.Windows.Forms;
 
namespace WpfApplication1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private MediaPlayer _mpBgr;
        private MediaPlayer _mpCurSound;
 
        public MainWindow()
        {
            InitializeComponent();
            _mpBgr = new MediaPlayer();
            _mpCurSound = new MediaPlayer();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _mpBgr.Open(new Uri(@"C:/Documents and Settings/Eclipse/Мои документы/Visual Studio 2010/Projects/WpfApplication1/WpfApplication1/bin/Debug/Inc/Sounds/Sea.wav", UriKind.Absolute));
            _mpBgr.Play();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            _mpCurSound.Open(new Uri(@"C:/Documents and Settings/Eclipse/Мои документы/Visual Studio 2010/Projects/WpfApplication1/WpfApplication1/bin/Debug/Inc/Sounds/HerbLaugh.wav", UriKind.Absolute));
            _mpCurSound.Play();
        }
    }
}

Вот код. ДАже пути оставил)



0



Casper-SC

Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

04.04.2013, 11:02

6

Цитата
Сообщение от Eclipze
Посмотреть сообщение

ДАже пути оставил)

Кто так пути указывает? Раз файлов проекте, то нужно прописывать относительные пути. Иначе после перемещения проги в другую папку, она не будет работать.

Добавлено через 26 секунд

C#
1
_mpCurSound.Open(new Uri(@"/Inc/Sounds/HerbLaugh.wav", UriKind.Relative));

Добавлено через 1 минуту
А Windows Media Player на компе установлен?

Добавлено через 3 минуты
Эти музыкальные файлы копируются в выходной каталог при построении? http://msdn.microsoft.com/ru-r… .100).aspx (читай там раздел «Заметки»).

Цитата
Сообщение от Casper-SC
Посмотреть сообщение

А Windows Media Player на компе установлен?

Кстати, не факт что оно нужно. Не помню точно.



0



29 / 29 / 8

Регистрация: 28.01.2013

Сообщений: 211

04.04.2013, 11:04

 [ТС]

7

Цитата
Сообщение от Casper-SC
Посмотреть сообщение

А Windows Media Player на компе установлен?

Конечно.
А пути я уже всяко пробовал, это последний вариант был.



0



Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

04.04.2013, 11:09

8

Цитата
Сообщение от Casper-SC
Посмотреть сообщение

Эти музыкальные файлы копируются в выходной каталог при построении?

Ответь.



0



29 / 29 / 8

Регистрация: 28.01.2013

Сообщений: 211

04.04.2013, 11:11

 [ТС]

9

Цитата
Сообщение от Casper-SC
Посмотреть сообщение

Эти музыкальные файлы копируются в выходной каталог при построении?

Да.



0



Эксперт .NET

4431 / 2091 / 404

Регистрация: 27.03.2010

Сообщений: 5,657

Записей в блоге: 1

04.04.2013, 11:29

10

Давай через TeamViewer гляну. Просто странно. Но интересно.

Добавлено через 42 секунды
И, кстати, ничего не обещаю, если гляну. Но может и заработает.

Добавлено через 1 минуту
Потом, если найдём, то сюда отпишем в чём была проблема.



0



29 / 29 / 8

Регистрация: 28.01.2013

Сообщений: 211

04.04.2013, 14:07

 [ТС]

11

Короче, беда была в WMP он воспроизводил аудио и видео из винды, а с приложения не хотел. Обновил его и все заработало. Это конечно полный писец, что приходится в мултимедиа приложении зависеть от WMP или DirectX, ведь как быть с конечным пользователем, у которого возможно так же не будет обновлен WMP или не будет установлен DirectX………



0



burning1ife

1461 / 1283 / 293

Регистрация: 21.09.2008

Сообщений: 3,438

Записей в блоге: 9

04.04.2013, 15:40

12

для этого во многих приложениях и играх частенько с игрой идут необходимые компоненты, так что не вижу тут ничего странного или страшного, чтобы вкл. в требования к нормальной работе продукта или вкл. эти компоненты в инсталлятор.
а так, почти ни одна игра не запустится без DirectX.



0



Jman

89 / 77 / 38

Регистрация: 11.10.2015

Сообщений: 860

17.01.2017, 14:22

13

Народ, помогите пожалуйста. Как запустить мр3, просто при открытии приложения?

C#
1
2
3
4
5
   public MainWindow()
        {
            InitializeComponent();
            SoundPlayer();
}
C#
1
2
3
4
5
6
  private MediaPlayer player = new MediaPlayer();
        private void SoundPlayer()
        {
            player.Open(new Uri("Resources/Cannon.mp3", UriKind.RelativeOrAbsolute));
            player.Play();
        }

Я вот так сделал и тишина.

Добавлено через 30 минут
Все, вопрос закрыт.



0



Для воспроизведения стандартных системных звуков есть функция PlaySound. В .NET функция частично обёрнута классом System.Media.SystemSounds. Там не все звуки, но для ваших целей хватит.

Стандартные картинки добываются с помощью функции LoadIcon. В .NET функция обёрнута классом SystemIcons.

Всё это классы Windows.Forms. Если вы используете WPF, то вам надо будет конвертировать классы в WPF’ные. Используйте для этого класс Imaging.

Если вам нужны продвинутые сообщения, в новых версиях системы они встроены, находятся где-то в районе функций оболочки. Обёртки для этих функций есть в библиотеке Windows API Code Pack. Microsoft про эту библиотеку подзабыла, но в разных формах она всё ещё жива и доступна. См. Windows API Code Pack: Where is it?

I’ve recently begun work on an audio application using C#.NET. I’ve begun some basic implementation of the NAudio library which I intend to use throughout the project. While looking at NAudio’s documentation on CodePlex I found a link to the WPF Sound Visualization Library, I was attracted by one of its features in particular which I knew I would require in my app.
So I downloaded and added it to my project References.
I’ve copied how it is referenced within a window’s XAML document, like so:

xmlns:svl="clr-namespace:WPFSoundVisualizationLib;assembly=WPFSoundVisualizationLib"

and then tried to add a control within the library using:

<svl:WaveformTimeline x:Name="testWaveformTimeline"/> 

The problem is that the designer/XMAL editor claims: «svl:WaveformTimeline» does not exist in namespace «clr-namespace:WPFSoundVisualizationLib;assembly=WPFSoundVisualizationLib».

Now I know that it does exist. I can make reference to the WaveformTimeline object in the class file, and the object shows up in Visual Studio’s Object Browser.

I’m not at all sure why this is the case. If anyone knows any possible solutions to this, or things I should check any help would be appreciated.

#c# #wpf #beep

#c# #wpf #звуковой сигнал

Вопрос:

Есть ли какие-либо способы сделать звуковой сигнал в C # WPF?

Я искал звуковой сигнал WPF, но все, что я мог найти, это звуковой сигнал в обычной форме Windows.

Комментарии:

1. Вы пробовали обычный звуковой сигнал? Разве это не работает?

Ответ №1:

Вы можете издать звуковой сигнал, используя:

 SystemSounds.Beep.Play();
 

Ответ №2:

Ответ №3:

  Console.Beep(3000,200)
 

Вот документация

Кстати, это не ограничивается только консольными приложениями.

Ответ №4:

Вы можете воспроизводить любую вещь:

 SoundPlayer snd = new SoundPlayer(filePath);
snd.Play();
 

Один из самых простых классов в .Net для воспроизведения
звуковых файлов находится в пространстве имен System.Media.
Может проигрывать только файлы формата WAV-аудио
Для применения объекта в XAML разметке применяется элемент

<!Декларативный подход при указании проигрываемого файла>

<SoundPlayerAction Source=«test.wav»></SoundPlayerAction>

Пример воспроизведение аудио через Xaml разметку

<Button>

            <Button.Content>Проигрывание из XAML</Button.Content>

            <Button.Style>

                <Style>

                    <Style.Triggers>

                        <EventTrigger RoutedEvent=»Button.Click»>

                            <EventTrigger.Actions>

                                <!—Декларативный подход при указании проигрываемого файла—>

                                <SoundPlayerAction Source=»test.wav»></SoundPlayerAction>

                            </EventTrigger.Actions>

                        </EventTrigger>

                    </Style.Triggers>

                </Style>

            </Button.Style>    

        </Button>

Воспроизведение аудио MediaPlayer

System.Windows.Media
Для работы данного класса в системе должен быть установлен
проигрыватель Windows Media Player 10 или выше. Класс может воспроизводить файлы формата MP3.

Свойства и методы

  • Balance – установка баланса между левым и правым каналом.
  • Volume — громкость
  • SpeedRatio – скорость воспроизведения (по умолчанию 1)
  • HasAudio, HasVideo – проверка, какой формат медиа содержит загруженный файл
  • NaturalDuration, NaturalVideoHeight, NaturalVideoWidth –продолжительность дорожки, высота и ширина видео.
  • Position – TimeSpan, указывающий текущее место в медиа файле.
  • DownloadProgress, BufferingProgress – значения представлены в виде числа от 0 до 1. Полезны в тех случаях, когда воспроизводится
  • удаленный файл.
  • Clock – MediaClock для синхронизации аудио с временной шкалой (хранит значение null если воспроизведение запускается из кода).
  • Open() – Загрузка нового медиа файла
  • Play() – Начать воспроизведение.
  • Pause() – Приостановить воспроизведение.
  • Stop() – Остановить воспроизведение.

MediaElement XAML разметка

MediaElement — класс является оболочкой класса MediaPlayer, помещается непосредственно в пользовательский интерфейс и позволяет воспроизводить аудио и видео.

Пример синхронного воспроизведение аудио

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

private void cmdPlayAudio_Click(object sender, RoutedEventArgs e)

        {

            SoundPlayer player = new SoundPlayer();

            // Файл находится в ресурсах приложения.

            player.Stream = Properties.Resources.chord;

            try

            {

                player.Load();

                player.PlaySync(); // Синхронное воспроизведение, в этом же потоке.

            }

            catch (FileNotFoundException)

            {

                MessageBox.Show(«Файл не найден»);

            }

            catch (FormatException)

            {

                MessageBox.Show(«Не верный формат аудио.»);

            }

        }

Пример воспроизведение аудио в асинхронном режиме.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

private void cmdPlayAudioAsync_Click(object sender, RoutedEventArgs e)

        {

            SoundPlayer player = new SoundPlayer();

            player.SoundLocation = «test.wav»;

            try

            {

                player.Load();

                player.Play(); // асинхронное воспроизведение в отдельном потоке.

            }

            catch (FileNotFoundException)

            {

                MessageBox.Show(«Файл не найден»);

            }

            catch (FormatException)

            {

                MessageBox.Show(«Не верный формат аудио.»);

            }

        }

Пример воспроизведения аудио с помощью MediaPlayer 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// Объект MediaPlayer будет работать только в том случае, если в системе установлен Windows Media Player 10 или выше

        private MediaPlayer player = new MediaPlayer();

        private void cmdPlayWithMediaPlayer_Click(object sender, RoutedEventArgs e)

        {

            player.MediaFailed += new EventHandler<ExceptionEventArgs>(player_MediaFailed);

            player.Open(new Uri(«test.mp3», UriKind.Relative));

            player.Play(); // Метод Play не выбрасывает исключений, для отлова ошибок нужно делать обработчики на события

        }

        void player_MediaFailed(object sender, ExceptionEventArgs e)

        {

            MessageBox.Show(«Ошибка во время открытия файла.»);

        }

        private void window_Closed(object sender, EventArgs e)

        {

            player.Close(); // При закрытии окна освобождаем объект MediaPlayer

        }

WPF has several options for playing sound.  One of these is the SoundPlayer, which can be useful for simple, relatively small, .wav files.   You pass in the details of the source file to the  SoundPlayer’s Play method:

1
2
3
4
5
6
7
8
Imports System.Media

Class MainWindow

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        Dim player As New SoundPlayer("C:TempRing01.wav")
        player.Play()
    End Sub

By default the sound will play asynchronously, so the application will continue about its business while the sound is playing.  This is mostly what you’ll want, but this class also offers a PlaySync method if you want to freeze the application while the sound plays.  

If you want the sound to loop, you can use the PlayLooping method.  If you do this, you’ll probably want to also include some way of letting the user stop the loop. 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Imports System.Media

Class MainWindow

    Dim player As New SoundPlayer("C:TempRing01.wav")

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        player.PlayLooping()
    End Sub

    Private Sub MainWindow_MouseDoubleClick(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseDoubleClick
        player.Stop()
    End Sub
End Class

One thing to note is that the audio file isn’t loaded until the first time the sound is played.  So if the audio file is big and/or the system’s computing power is small, you can get unacceptable delays.  To get round this, the best thing to do is run the Load method at any suitable time before the Play method is called.  This will set the SoundPlayer up in advance and avoid those potential ugly pauses.  Alternatively, and especially if you’re loading a large file or a sound file from an external source, you might want to use the LoadAsync method instead. 

My example above points to a sound file in the C:Temp folder.  If you can’t be sure that the file will be there, you can add it to the project in the usual way in Solution Explorer. If you do this, check that the Build Action is set to Content and the Copy to Output Directory to Copy Always.  You can then access it simply by using the file name and extension.

Very occasionally, you might have a situation where you want to access the SoundPlayer in XAML.   WPF offers you the SoundPlayerAction in this case.   Most times you’ll find procedural code a better alternative, although SoundPlayerAction can be useful when you want to combine and synchronize sound with animation. 

The example below combines a SoundPlayerAction  with an EventTrigger to make it play.  Clearly, you could achieve the same effect using code behind, but this snippet does at least show how you can use the Xaml approach if you you need it.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
        <Image Name="Image1" Stretch="Fill" Source="/Exclamation.png" Width="90" Height="90" >

            <Image.Triggers>
                <EventTrigger RoutedEvent="Image.MouseEnter">
                    <EventTrigger.Actions>
                        <SoundPlayerAction Source="Ring02.wav"/>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Image.Triggers>
        </Image>

You can also play some of the built in Windows sounds without having to directly reference a wav file.  These are Asterisk, Beep, Exclamation, Hand and Question.   Keep in mind though that the sound that each of these produces is user configurable from the Control Panel, so you should avoid these if you need to guarantee that you will get a particular sound.

The syntax of SystemSounds is simple:

        System.Media.SystemSounds.Exclamation.Play()

The above features are useful, but limited.  You can start and stop the player, but not much else and you’re limited to .wav files.  And the five system sounds can be handy for flagging up problems, but you’ll often need a wider range.  For this, you’ll need the media player, which I’ll deal with next.


Posted
May 27 2013, 08:37 PM
by
Ged Mead

Filed under: WPF, Sounds, EventTrigger, Sound Effects, Exclamation, Hand, SoundPlayer, Audio, SystemSounds, Asterisk, SoundPlayerAction, Beep, Question, .wav files

Понравилась статья? Поделить с друзьями:
  • X lite ошибка 401
  • Wox5 ошибка лост арк
  • Wsus произошла ошибка при создании отчета
  • X firefox exe ошибка при запуске компьютера
  • Wox5 ошибка lost ark