Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Воспроизведение музыкальных файлов в VB


Автор: Mick Winder 15.11.2004, 16:42
Доброго вечера, народ!!!
В данном подфоруме я впервые, что не удивительно, т.к. только сегодня решил начать изучать Visual Basic... (А так я дельфист...) Потому начну задавать детсадовские вопросы, так что помогите разобраться в номом для меня языке программирования... Пожелайте мне удачи! smile
Мне нужно для с помощью какой либо клавиши заставить проиграть музыкальный файл формата mp3...
Написал такой код:

Private Sub Form_Load()
Player1.DeviceType = "WaveAudio"
End Sub

Private Sub Command1_Click()
Player1.FileName = "F:\nz.mp3"
Player1.Command = "Open"
Player1.Command = "Sound"
Player1.Command = "Close"
End Sub

Почему-то не проигрывает... Почему? smile

Автор: boevik 15.11.2004, 17:01
А жто за компонента Player?

Автор: Mick Winder 16.11.2004, 09:35
Это не компонента... Это имя компоненты MMControl, взятая из Microsoft Multimedia Control 6.0

Автор: boevik 16.11.2004, 10:41
Mick Winder, а он умеет играть mp3?
wav файлы проигрывает без проблем.

Автор: Mick Winder 16.11.2004, 12:17
Теоретически должен проигрывать и wav, и mp3... но чего-то не то... не играет...

Автор: Сувор 16.11.2004, 12:25
Забудь про MMControl и подключи Windows Media Player -все играет и проблем меньше.

Автор: amt 16.11.2004, 22:05
Mick Winder, я согласен с Сувор

Используй MediaPlayer из компоненты Windows Media Player
Вот пример кода который у меня работает

Код

Private Sub Form_Load()
MediaPlayer1.Visible = False
MediaPlayer1.FileName = "filePath\fileName.mp3"
End Sub


Если нужно управлять воспроизведение файла сделай MediaPlayer1.Visible = True
Может не стоит заморачиваться?
Удачи!


Автор: Mick Winder 17.11.2004, 14:55
Спасибо всем!!!

Автор: Антикатод 19.11.2004, 08:56
А можно так (или как нибудь еще) проигрывать одновременно несколько звуков (знаю, что теоретически нет, но практически)? smile

Оочень надо. Зачем? Для того чтобы сделать "драм-машину" (если она так называется). Короче, по клавиша жмем; и получаются ударные партии.

Знаю, что очень в втему. smile

Автор: amt 19.11.2004, 15:45
Можно в форме разместить несколько Windows MediaPlayer и каждый будет играть свой mp3 файл. Я пробовал с двумя.

Автор: amt 20.11.2004, 18:17
Антикатод

Цитата
А можно так (или как нибудь еще) проигрывать одновременно несколько звуков (знаю, что теоретически нет, но практически)? 

Оочень надо. Зачем? Для того чтобы сделать "драм-машину" (если она так называется). Короче, по клавиша жмем; и получаются ударные партии.

Знаю, что очень в втему


Если тебе нужно проигрывать несколько mp3 файлов одновременно могу предложить следующее:
Создай проект с формой.
Размести в ней Windows Media Player.
Копируй его в буфер.
Вставь его из буфера в пустое место формы.
Программа спросит у тебя хочешь ли ты создать контейнер.
Соглашайся.
Проигрыватели будут иметь имена
MediaPlayer1(0)
MediaPlayer1(1)
С индексом 1 можешь смело удалять.
Дальше добавь в форму несколько кнопок (у меня в примере четыре) и запиши следующий код.
У меня класно работает.

Код

Private Sub Form_Load()
Load MediaPlayer1(3)
Load MediaPlayer1(2)
Load MediaPlayer1(1)
MediaPlayer1(0).Visible = False
Command1.Caption = "Play"
Command2.Caption = "Play"
Command3.Caption = "Play"
Command4.Caption = "Play"
End Sub

Private Sub Command1_Click()
If MediaPlayer1(0).PlayState = mpPlaying Then
   Command1.Caption = "Play"
   MediaPlayer1(0).Stop
   Exit Sub
   End If
Command1.Caption = "Stop"
MediaPlayer1(0).FileName = "путь к файлу1"
End Sub

Private Sub Command2_Click()
If MediaPlayer1(1).PlayState = mpPlaying Then
   Command2.Caption = "Play"
   MediaPlayer1(1).Stop
   Exit Sub
   End If
Command2.Caption = "Stop"
MediaPlayer1(1).FileName = " путь к файлу 2"
End Sub

Private Sub Command3_Click()
If MediaPlayer1(2).PlayState = mpPlaying Then
   Command3.Caption = "Play"
   MediaPlayer1(2).Stop
   Exit Sub
   End If
Command3.Caption = "Stop"
MediaPlayer1(2).Visible = False
MediaPlayer1(2).FileName = " путь к файлу 3"
End Sub

Private Sub Command4_Click()
If MediaPlayer1(3).PlayState = mpPlaying Then
   Command4.Caption = "Play"
   MediaPlayer1(3).Stop
   Exit Sub
   End If
Command4.Caption = "Stop"
MediaPlayer1(3).Visible = False
MediaPlayer1(3).FileName = " путь к файлу 4"
End Sub

Private Sub MediaPlayer1_PlayStateChange(Index As Integer, ByVal OldState As Long, ByVal NewState As Long)
If MediaPlayer1(0).PlayState = mpStopped Then Command1.Caption = "Play"
If MediaPlayer1(1).PlayState = mpStopped Then Command2.Caption = "Play"
If MediaPlayer1(2).PlayState = mpStopped Then Command3.Caption = "Play"
If MediaPlayer1(3).PlayState = mpStopped Then Command4.Caption = "Play"
End Sub

Если я че не так понял в твоем вопросе – пиши (может еще че придумаю).
При желании можно написать код чтобы запускать/выключать проигрыватели нажатием клавиш на клаве.

PS
Если нужно много Player-ов то лучше создать контейнер для кнопок (также как и для проигрывателей)
Тогда код сократиться. При этом стоит объявить как одномерный текстовый массив кокую-нибудь переменную (fileName) и записать в этот массив все пути к mp3.

Тогда код будет выглядеть примерно так:

Код

Private Sub Command1_Click(Index As Integer и т.д.)
If MediaPlayer1(Index).PlayState = mpPlaying Then
   Command1(Index).Caption = "Play"
   MediaPlayer1(Index).Stop
   Exit Sub
   End If
Command1(Index).Caption = "Stop"
MediaPlayer1(Index).Visible = False
MediaPlayer1(Index).FileName = filerName(Index)
End Sub

Private Sub MediaPlayer1_PlayStateChange(Index As Integer, ByVal OldState As Long, ByVal NewState As Long)
If MediaPlayer1(Index).PlayState = mpStopped Then Command1(Index).Caption = "Play"
End Sub


(Этот код не проверял, но должен работать если я в синтаксисе не наделал ошибок)
Дальше можно записать код, вызывающий событие нажатия той или иной кнопки Command при нажатии соответствующей клавиши на клаве.
Кстати, что бы не перегружать память, может имеет смысл загружать Player-ы не при Form_Load(), а при Command_Click(). Тогда нужно выгружать Player-ы после окончания проигрывания файлов.
Короче: можно много чего придумать.
Удачи!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)