Подскажите, возможно ли в wfp приложении проигрывать системные звуки?
Я хочу реализовать следующее: при определенном событии появляется отображается предупреждение и проигрывается системный звук «Windows Notify».
задан 15 апр 2011 в 9:02
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
4
29 / 29 / 8 Регистрация: 28.01.2013 Сообщений: 211 |
|
1 |
|
Воспроизведение звука03.04.2013, 16:48. Показов 16768. Ответов 12
Доброго времени суток всем! Подскажите пожалуйста, как в WPF воспроизвести несколько звуков одновременно?
0 |
Casper-SC 4431 / 2091 / 404 Регистрация: 27.03.2010 Сообщений: 5,657 Записей в блоге: 1 |
||||
04.04.2013, 09:28 |
2 |
|||
0 |
29 / 29 / 8 Регистрация: 28.01.2013 Сообщений: 211 |
|
04.04.2013, 10:40 [ТС] |
3 |
Casper-SC, спасибо большое, попробую. Добавлено через 24 минуты
0 |
4431 / 2091 / 404 Регистрация: 27.03.2010 Сообщений: 5,657 Записей в блоге: 1 |
|
04.04.2013, 10:52 |
4 |
Casper-SC, Сделал все именно так, ошибки не вылетает, но звук не воспроизводится) По-ка-жи код… Не факт что сделал прям всё именно так и пути правильно указал и прочее. Добавлено через 1 минуту Добавлено через 3 минуты
0 |
Eclipze 29 / 29 / 8 Регистрация: 28.01.2013 Сообщений: 211 |
||||
04.04.2013, 10:54 [ТС] |
5 |
|||
Вот код. ДАже пути оставил)
0 |
Casper-SC 4431 / 2091 / 404 Регистрация: 27.03.2010 Сообщений: 5,657 Записей в блоге: 1 |
||||
04.04.2013, 11:02 |
6 |
|||
ДАже пути оставил) Кто так пути указывает? Раз файлов проекте, то нужно прописывать относительные пути. Иначе после перемещения проги в другую папку, она не будет работать. Добавлено через 26 секунд
Добавлено через 1 минуту Добавлено через 3 минуты
А Windows Media Player на компе установлен? Кстати, не факт что оно нужно. Не помню точно.
0 |
29 / 29 / 8 Регистрация: 28.01.2013 Сообщений: 211 |
|
04.04.2013, 11:04 [ТС] |
7 |
А Windows Media Player на компе установлен? Конечно.
0 |
4431 / 2091 / 404 Регистрация: 27.03.2010 Сообщений: 5,657 Записей в блоге: 1 |
|
04.04.2013, 11:09 |
8 |
Эти музыкальные файлы копируются в выходной каталог при построении? Ответь.
0 |
29 / 29 / 8 Регистрация: 28.01.2013 Сообщений: 211 |
|
04.04.2013, 11:11 [ТС] |
9 |
Эти музыкальные файлы копируются в выходной каталог при построении? Да.
0 |
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 |
для этого во многих приложениях и играх частенько с игрой идут необходимые компоненты, так что не вижу тут ничего странного или страшного, чтобы вкл. в требования к нормальной работе продукта или вкл. эти компоненты в инсталлятор.
0 |
Jman 89 / 77 / 38 Регистрация: 11.10.2015 Сообщений: 860 |
||||||||
17.01.2017, 14:22 |
13 |
|||||||
Народ, помогите пожалуйста. Как запустить мр3, просто при открытии приложения?
Я вот так сделал и тишина. Добавлено через 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