Nano Hash - криптовалюты, майнинг, программирование

Воспроизведение разных файлов MP3 один за другим в VB.Net 2019

Я создаю приложение для малых форм в VB.Net 2019, которое будет сканировать мой жесткий диск на наличие файлов MP3, а затем воспроизводить их в случайном порядке. В этот момент я сканирую свой диск и загружаю все в два списка (один для пути, один для имени файла, потому что я также хочу экспортировать в CSV). Где-то в будущем эти данные попадут в базу данных с дополнительной информацией, чтобы я мог случайным образом выбрать жанр музыки, который я хочу играть в данный момент.

Когда я нажимаю кнопку cmdRandom, начинает воспроизводиться первый файл, но когда я хочу продолжить со следующего случайного файла, файл ищется и загружается в медиаплеер, но не начинает воспроизведение (мне нужно нажать «воспроизведение» вручную) . Вот мой код:

Private Sub cmdRandom_Click(sender As Object, e As EventArgs) Handles cmdRandom.Click
    intaantal = ListBox2.Items.Count
    Randomize()
    PlayMedia()
End Sub

Private Sub PlayMedia()
    intNumber = CInt(Int((intAantal * Rnd()) + 1))
    ListBox1.SelectedIndex = intNumber
    ListBox2.SelectedIndex = intNumber
    FileName = ListBox1.SelectedItem.ToString() + "\" + ListBox2.SelectedItem.ToString()
    lblSongText.Text = FileName
    '       mPlayer.URL = ""
    '       mPlayer.Refresh()
    '       mPlayer.close()
    '       mPlayer.settings.autoStart = True
    '       mPlayer.settings.setMode("loop", True)
    '       mPlayer.Ctlcontrols.play()
    mPlayer.URL = FileName
End Sub
Private Sub mPlayer_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles mPlayer.PlayStateChange
    If mPlayer.playState = mPlayer.playState.wmppsMediaEnded Then
        PlayMedia()
    End If
End Sub

Все закомментированные элементы в PlayMedia() уже протестированы, но не работают. Я думал, что добавление mPlayer.Ctlcontrols.play() в функцию mPlayer_playStateChange() в предложении else текущего if будет работать, но это дает мне ошибку компиляции (кажется не допускается в этом случае).

Что я делаю неправильно?


  • Вы написали сабвуфер Randomize или используете встроенный Randomize? Если вы используете встроенный Randomize, то это ваша ошибка - встроенный меняет начальное число при генерации случайных чисел - это не имеет ничего общего с рандомизацией списков :-) - я опубликую ответ ниже на основе этого предположения - позже этим вечером, когда я все это написал :) 10.06.2020
  • @DavidWilson, думаю, что ОП действительно может быть прав с рандомизацией. В первой строке метода PlayMedia он получает свой случайный идентификатор строки. Кроме того, мне кажется, что даже если бы Random не работал, он все равно что-то играл бы. Возможно, лучше всего отладить событие mPlayer_PlayStateChanged, чтобы убедиться, что оно работает так, как ожидалось. 10.06.2020
  • Вы говорите, что подтвердили, что если вы установите точку останова для этого метода PlayMedia, он сработает, когда вы ожидаете, и весь код в нем будет выполнен и сделает именно то, что вы ожидаете? 10.06.2020
  • Я разместил точки останова в разных местах кода, чтобы увидеть, что происходит, и увидеть, как событие playStateChanged запускается каждый раз, когда оно должно запускаться. Только когда песня закончила играть, он, как и ожидалось, снова вызывает PlayMedia. Затем я вижу, что новый файл выбран из моего списка, загружен в элемент управления и метка обновлена ​​(как вы можете видеть в коде). Однако файл не воспроизводится, мне нужно нажать кнопку воспроизведения, чтобы начать его. Поэтому я убежден, что мне нужно сделать что-то еще, чтобы сбросить управление медиаплеером, чтобы он начинался с новой песни. 10.06.2020

Ответы:


1

Решение найдено в Интернете после другого поиска: (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/31082234-7161-4446-a96e-32c0314dfe0f/actions-when-a-media-player-control-finished-playing?forum=vbgeneral). Все дело во времени между окончанием первой песни и загрузкой следующей. Я добавил таймер, и теперь все исправлено, я установил интервал таймера на 100.

 Private Sub mPlayer_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles mPlayer.PlayStateChange
    If mPlayer.playState = mPlayer.playState.wmppsMediaEnded Then
        mPlayer.Ctlcontrols.stop()
        Timer1.Start()
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Timer1.Stop()
    PlayMedia()
End Sub
10.06.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..