C # - я хочу, чтобы мой проигрыватель задерживал 2 секунды перед воспроизведением любого файла и повторял его в цикле (For) - PullRequest
0 голосов
/ 21 февраля 2019

Привет Я написал следующий код, но только один раз воспроизводил аудиофайл после того, как он покинул событие "dataGridView1_CellClick" .Я хочу знать:


1) Можно ли воспроизвести звук в рамках мероприятия?


2) Могу ли я повторить трансляцию, не используя "Player.settings.playCount "?Потому что этот код нельзя отложить до выпуска каждого файла.Спасибо

Мой код:

WMPLib.WindowsMediaPlayer Player = new WMPLib.WindowsMediaPlayer();

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{

    //...

    //********** Play audio of Word
    // sVoicePath = @"C:\4536.mp3"
      sVoicePath = Application.StartupPath + dataGridView1.CurrentRow.Cells[4].Value.ToString();
      PlayFile(sVoicePath);
    //...
}

//*****************************
private void PlayFile(String url)
        {
            for (int i = 0; i < 3 ;i++)
            {
                System.Threading.Thread.Sleep(2000);
                Player.URL = url;
                Player.controls.play();
            }
        }
//*****************************
        private void Player_PlayStateChange(int NewState)
        {
            if ((WMPLib.WMPPlayState)NewState == 
                    WMPLib.WMPPlayState.wmppsStopped)
            {
                //Actions on stop
            }
        }

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Спасибо за ваш ответ, ваш код решил мою проблему.

Но звук все еще воспроизводится, когда выходит прогонсобытия « dataGridView1_CellClick ».Можно ли транслировать звук, когда исполнение программы все еще находится в функции PlayFile (String url) ?


Чтобы сообщить другим друзьям, ядля запуска этого кода должна возникнуть следующая ошибка:

ошибка CS0012 Тип 'IObservable <>' определен в сборке, на которую нет ссылок.Необходимо добавить ссылку на сборку 'netstandard, версия = 2.0.0.0, Culture = нейтральная, PublicKeyToken = cc7b13ffcd2ddd51'.

Чтобы решить эту проблему, я выполнил три шага, пока проблема не была решена.

1) установить nuget-client-tools (Вы можете получить, например, со следующих сайтов: "https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli" ИЛИ "https://www.nuget.org/downloads" ИЛИ ...)

Затем в консоли диспетчера пакетов выполните две команды:

2) PM> Install-Package System.Reactive -Version 4.1.3

3) PM> Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre или PM> Пакет установки NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre ИЛИ Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 (необходимо подключиться к Интернету)

0 голосов
/ 21 февраля 2019

Вы можете использовать Microsoft Reactive Framework (он же Rx).NuGet System.Reactive и добавьте using System.Reactive.Linq к своему коду.Тогда вы можете сделать это:

private void PlayFile(String url)
{
    Observable
        .Interval(TimeSpan.FromSeconds(1.0))
        .Take(3)
        .Subscribe(x =>
        {
            Player.URL = url;
            Player.controls.play();
        });
}
...