Практическое руководство. Циклическое воспроизведение звука в Windows Forms
В следующем примере кода выполняется повторяющееся воспроизведение звука. Когда этот код запускается в обработчике события stopPlayingButton_Click , воспроизведение звука останавливается. Если звук не воспроизводится, то ничего не происходит.
Пример
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Media; using System.Windows.Forms; namespace SoundPlayerPlayLoopingExample < public class Form1 : Form < private SoundPlayer Player = new SoundPlayer(); public Form1() < InitializeComponent(); >private void playLoopingButton_Click(object sender, EventArgs e) < try < // Note: You may need to change the location specified based on // the sounds loaded on your computer. this.Player.SoundLocation = @"C:\Windows\Media\chimes.wav"; this.Player.PlayLooping(); >catch (Exception ex) < MessageBox.Show(ex.Message, "Error playing sound"); >> private void stopPlayingButton_Click(object sender, EventArgs e) < this.Player.Stop(); >/// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) < if (disposing && (components != null)) < components.Dispose(); >base.Dispose(disposing); > #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() < this.playLoopingButton = new System.Windows.Forms.Button(); this.stopPlayingButton = new System.Windows.Forms.Button(); this.SuspendLayout(); // // playLoopingButton // this.playLoopingButton.Location = new System.Drawing.Point(12, 12); this.playLoopingButton.Name = "playLoopingButton"; this.playLoopingButton.Size = new System.Drawing.Size(87, 23); this.playLoopingButton.TabIndex = 0; this.playLoopingButton.Text = "Play Looping"; this.playLoopingButton.UseVisualStyleBackColor = true; this.playLoopingButton.Click += new System.EventHandler(this.playLoopingButton_Click); // // stopPlayingButton // this.stopPlayingButton.Location = new System.Drawing.Point(105, 12); this.stopPlayingButton.Name = "stopPlayingButton"; this.stopPlayingButton.Size = new System.Drawing.Size(75, 23); this.stopPlayingButton.TabIndex = 1; this.stopPlayingButton.Text = "Stop"; this.stopPlayingButton.UseVisualStyleBackColor = true; this.stopPlayingButton.Click += new System.EventHandler(this.stopPlayingButton_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(195, 51); this.Controls.Add(this.stopPlayingButton); this.Controls.Add(this.playLoopingButton); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); >#endregion private System.Windows.Forms.Button playLoopingButton; private System.Windows.Forms.Button stopPlayingButton; > static class Program < /// /// The main entry point for the application. /// [STAThread] static void Main() < Application.EnableVisualStyles(); Application.Run(new Form1()); >> >
Imports System.Media Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private Player As New SoundPlayer Sub New() Me.InitializeComponent() End Sub Private Sub playLoopingButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles playLoopingButton.Click Try ' Note: You may need to change the location specified based on ' the sounds loaded on your computer. Me.Player.SoundLocation = "C:\Windows\Media\chimes.wav" Me.Player.PlayLooping() Catch ex As Exception MessageBox.Show(ex.Message, "Error playing sound") End Try End Sub Private Sub stopPlayingButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles stopPlayingButton.Click Me.Player.Stop() End Sub 'Form overrides dispose to clean up the component list. _ Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub Friend WithEvents playLoopingButton As System.Windows.Forms.Button Friend WithEvents stopPlayingButton As System.Windows.Forms.Button 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. _ Private Sub InitializeComponent() Me.playLoopingButton = New System.Windows.Forms.Button Me.stopPlayingButton = New System.Windows.Forms.Button Me.SuspendLayout() ' 'playLoopingButton ' Me.playLoopingButton.Location = New System.Drawing.Point(12, 12) Me.playLoopingButton.Name = "playLoopingButton" Me.playLoopingButton.Size = New System.Drawing.Size(89, 23) Me.playLoopingButton.TabIndex = 0 Me.playLoopingButton.Text = "Play Looping" Me.playLoopingButton.UseVisualStyleBackColor = True ' 'stopPlayingButton ' Me.stopPlayingButton.Location = New System.Drawing.Point(107, 12) Me.stopPlayingButton.Name = "stopPlayingButton" Me.stopPlayingButton.Size = New System.Drawing.Size(75, 23) Me.stopPlayingButton.TabIndex = 1 Me.stopPlayingButton.Text = "Stop" Me.stopPlayingButton.UseVisualStyleBackColor = True ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(197, 52) Me.Controls.Add(Me.stopPlayingButton) Me.Controls.Add(Me.playLoopingButton) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) End Sub _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
Компиляция кода
Для этого примера требуются:
- ссылки на сборки System и System.Windows.Forms;
- замена имени файла «c:\Windows\Media\chimes.wav» на допустимое имя файла.
Отказоустойчивость
Операции с файлами должны быть включены в соответствующие блоки обработки исключений.
При следующих условиях возможно возникновение исключения:
- Недопустимое имя пути (например, путь содержит недопустимые символы или состоит только из символ-разделитель (класс ArgumentException)).
- Путь доступен только для чтения (класс IOException).
- Имя пути — Nothing (класс ArgumentNullException).
- Указано слишком длинное имя пути (класс PathTooLongException).
- Недопустимый путь (класс DirectoryNotFoundException).
- Путь содержит только двоеточие («:») (класс NotSupportedException).
Безопасность .NET Framework
По имени файла не всегда можно с уверенностью судить о его содержимом. Например, файл с именем Form1.vb может вовсе не быть исходным файлом Visual Basic. Следует проверять все входные данные перед использованием их в приложении.
См. также
- PlayLooping
- Практическое руководство. Воспроизведение звука в Windows Forms
- Общие сведения о классе SoundPlayer
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Повтор трека в аудиоплеере wpf c#
Пишу сейчас свой аудиоплеер и хочу добавить фичу бесконечного воспроизведения одного трека. Но никак не получается это сделать. Пользуюсь библиотекой WMPLib. Хочу сделать так чтобы на нажатие на кнопку повторялся 1 и тот же трек, пока значение bool равен true(но необязательно именно так). Перекопал ру инет сегмент и анг сегмент, видел примеры решения проблем но ни один из них не смог решить проблему. Примерно так хотел реализовать, но как вы поняли уже и это не помогло.
if(flag==true)
Можно как то решить эту проблему?
Отслеживать
задан 23 фев 2020 в 18:22
61 6 6 бронзовых знаков
Вам надо использовать подписку на событие Player.PlayStateChange и в методе проверять что плейер состояние сменилось на WMPLib.WMPPlayState.wmppsStopped и тогда запускать снова воспроизведение. см док.
23 фев 2020 в 21:59
в WPF нет события PlayStateChange, уже пробовал этот решение
24 фев 2020 в 7:46
А причем здесь WPF? Вы по ссылке ходили? Там же есть примеры кода.
24 фев 2020 в 12:18
Еще раз говорю, пробовал я этот способ
24 фев 2020 в 12:57
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Решил вопрос сам. Решил далеко не идеально, с помощью выдумывания костылей, матов, и терпения. При нажатии на кнопку ставил flag=!flag и передавал значение в конструктор класса который отслеживал статус воспроизведения и
if (flag == true&&PlayingStatus==Status.Playing) Repeat();
В методе Repeat выполнял код почти как выше, только без проверки на значение bool и с преобразованием TimeSpanов в числовое значение int с количеством секунд в треке(иначе из-за значения после запятой проверка не выполнялась со значением true)
Воспроизведение mp3

Воспроизведение потокового mp3
Подскажите библиотеки для данной задачи. Главное — понятная документация и различные.
Воспроизведение mp3: после обновления DirectX проект перестал запускаться
Есть код: using System; using System.Collections.Generic; using System.ComponentModel; using.
Winmm.dll. Воспроизведение mp3 файлов по прямой ссылке из интернета
Всем хай. Задача: воспроизводить mp3 файлы по прямой ссылке из интернета. Проблема: почему-то не.

Воспроизведение mp3
Добрый день. Мне для проекта нужно добиться воспроизведения звука в формате mp3. В результате.
Воспроизведение аудио
WPF поставляется с превосходной встроенной поддержкой аудио и видео, как вы увидите в следующей паре глав этого руководства. В этой статье мы обсудим возможность воспроизведения звука, исходящего из аудиофайлов, например в формате MP3. Но сначала давайте рассмотрим пару более простых подходов.
Системные звуки и класс SoundPlayer
WPF имеет класс под названием SoundPlayer, который будет воспроизводить для вас аудиоконтент на основе формата WAV. WAV не очень широко используется сегодня, главным образом потому, что он несжатый и, следовательно, занимает много места.
Поэтому, хотя класс SoundPlayer прост в использовании, это не очень полезно. Вместо этого мы будем фокусироваться на классах MediaPlayer и MediaElement, что позволяют воспроизводить файлы формата MP3, но сначала давайте посмотрим на самый простой способ воспроизведения звука в вашем приложении WPF — класс SystemSounds.
Класс SystemSounds предлагает несколько разных звуков, которые соответствуют звуку, определенному для этого события пользователем в Windows, например, Восклицание и Вопросу. Вы можете использовать эти звуки и настройки и воспроизводить их с помощью одной строки кода:
SystemSounds.Beep.Play();
Ниже — полный пример, в котором мы используем все доступные на данный момент звуки:
using System; using System.Media; using System.Windows; namespace WpfTutorialSamples.Audio_and_Video < public partial class SystemSoundsSample : Window < public SystemSoundsSample() < InitializeComponent(); >private void btnAsterisk_Click(object sender, RoutedEventArgs e) < SystemSounds.Asterisk.Play(); >private void btnBeep_Click(object sender, RoutedEventArgs e) < SystemSounds.Beep.Play(); >private void btnExclamation_Click(object sender, RoutedEventArgs e) < SystemSounds.Exclamation.Play(); >private void btnHand_Click(object sender, RoutedEventArgs e) < SystemSounds.Hand.Play(); >private void btnQuestion_Click(object sender, RoutedEventArgs e) < SystemSounds.Question.Play(); >> >

Конечно, есть несколько ограничений в использовании этого подхода. Прежде всего, вы получаете доступ только к этим пяти звукам, и, во-вторых, пользователь может отключить их в Windows, и в этом случае ожидаемый звук будет заменен тишиной. С другой стороны, если вы только хотите использовать эти звуки, так же, как это делает Windows, это позволит вам очень просто производить звук для предупреждений, вопросов и т. д. В этом случае это хороший выбор для обработки действий пользователя по умолчанию.
Класс MediaPlayer
Класс MediaPlayer использует технологию Windows Media Player для воспроизведения как аудио так и видео в нескольких современных форматах, например MP3 и MPEG. В этой статье, мы будем использовать его для воспроизведения только аудио, а в следующей статье сосредоточимся на видео.
Воспроизведение MP3-файла классом MediaPlayer очень просто, как мы увидим в следующем примере:
using System; using System.Windows; using System.Windows.Media; using Microsoft.Win32; namespace WpfTutorialSamples.Audio_and_Video < public partial class MediaPlayerAudioSample : Window < private MediaPlayer mediaPlayer = new MediaPlayer(); public MediaPlayerAudioSample() < InitializeComponent(); >private void btnOpenAudioFile_Click(object sender, RoutedEventArgs e) < OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*"; if(openFileDialog.ShowDialog() == true) < mediaPlayer.Open(new Uri(openFileDialog.FileName)); mediaPlayer.Play(); >> > >

В этом примере мы создаем простую кнопку, которая будет открывать диалоговое окно, где можно будет выбрать MP3 файл. Когда файл выбран, он будет использоваться в уже созданном MediaPlayer объекте для его открытия и воспроизведения. Обратите внимание, что MediaPlayer объект создается вне обработчика событий. Это позволяет нам быть уверенными, что объект не будет преждевременно собран сборщиком мусора, так как находится вне области видимости. Когда обработчик событий завершает работу, это приводит к остановке воспроизведения.
Также обратите внимание, что для этого примера не выполняется обработка исключений, как обычно, чтобы сделать пример максимально компактным, но и также потому, что методы Open() и Play() фактически не создают исключений. Вместо этого можно использовать события MediaOpened и MediaFailed, чтобы определить, когда идет все правильно или неправильно.
Управление MediaPlayer
В нашем первом примере MediaPlayer мы просто открыли и автоматически начали воспроизведение файла, не давая пользователю возможности контролировать процесс воспроизведения, но, разумеется, элемент управления MediaPlayer предлагает вам полный контроль над воспроизведением. Вот пример, показывающий наиболее важные функции:
using System; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using Microsoft.Win32; namespace WpfTutorialSamples.Audio_and_Video < public partial class MediaPlayerAudioControlSample : Window < private MediaPlayer mediaPlayer = new MediaPlayer(); public MediaPlayerAudioControlSample() < InitializeComponent(); OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*"; if(openFileDialog.ShowDialog() == true) mediaPlayer.Open(new Uri(openFileDialog.FileName)); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += timer_Tick; timer.Start(); >void timer_Tick(object sender, EventArgs e) < if(mediaPlayer.Source != null) lblStatus.Content = String.Format("/ ", mediaPlayer.Position.ToString(@"mm\:ss"), mediaPlayer.NaturalDuration.TimeSpan.ToString(@"mm\:ss")); else lblStatus.Content = "No file selected. "; > private void btnPlay_Click(object sender, RoutedEventArgs e) < mediaPlayer.Play(); >private void btnPause_Click(object sender, RoutedEventArgs e) < mediaPlayer.Pause(); >private void btnStop_Click(object sender, RoutedEventArgs e) < mediaPlayer.Stop(); >> >

В этом примере мы немного расширили проигрыватель, теперь он содержит кнопку воспроизведения, паузы и остановки, а также метку для отображения текущего состояния воспроизведения. Файл mp3 загружается точно так же, но мы делаем это, как только приложение запускается, чтобы упростить пример.
Сразу после загрузки MP3 мы запускаем таймер, который тикает каждую секунду. Мы используем это событие для обновления метки состояния, который будет показывать текущий прогресс, а также всю длину загруженного файла.
Каждая из трех кнопок просто вызывает соответствующий метод объекта MediaPlayer-Play, Pause и Stop.
Заключение
Есть еще несколько вариантов, которые вы можете позволить своему пользователю контролировать, но я хочу оставить их на потом, когда мы будем говорить о видео-аспектах класса MediaPlayer и тогда я сделаю более полный пример медиаплеера, способного воспроизводить как аудио, так и видео файлы, с большим количеством опций.
This article has been fully translated into the following languages:
Is your preferred language not on the list? Click here to help us translate this article into your language!