Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: BassPlayer и midi-файлы  (Прочитано 38179 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
monrus
Опытный

ru
Offline Offline

« : 11-08-2008 10:35 » 

Делаю программу для проигрывания муз.файлов. для этого использую BassPlayer 1.92 из torry.ru.
MP3 файлы проигрывает а миди нет. почему?

Дайте рабочий пример плз. Улыбаюсь
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #1 : 11-08-2008 11:01 » 

1 метр
http://www.torry.ru/vcl/mmedia/audio/TBASSPlayer192.zip
« Последнее редактирование: 11-08-2008 14:29 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 11-08-2008 14:33 » 

запустил демо - не найдена куча библиотек )

BASSWMA.DLL
BASSCD.DLL
BASSMIDI.DLL
Записан

monrus
Опытный

ru
Offline Offline

« Ответ #3 : 12-08-2008 03:06 » 

да я скачал эти библиотеки. все равно не работает. Пишет Invalid stream file
вот здесь:
procedure TForm1.Button1Click(Sender: TObject);
begin
if BP.BASSMIDIReady = True then
BP.Open('D:\1\RM\1\Blessed_Elton_John.mid');
end;
вроде как библиотека миди готова к работе, но...
пожалуйста помогите
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #4 : 13-08-2008 11:16 » 

помогите кто-нибудь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 13-08-2008 12:04 » 

monrus, поищи в этом разделе форума тему про компонент TMediaPlayer.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
monrus
Опытный

ru
Offline Offline

« Ответ #6 : 14-08-2008 02:55 » 

поискал, но ниче по теме не нашел Жаль
Записан
zubr
Гость
« Ответ #7 : 14-08-2008 03:59 » 

monrus, а что стандартный TMediaPlayer с миди не работает?
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #8 : 14-08-2008 11:59 » 

Работает. Но я хочу разобраться с TBassPlayerom. Люблю кривые пути.
А если серьезно. просто уже начал с этой библиотекой работать и хочу добить все до конца.
Вот и прошу вашей помощи.
Записан
zubr
Гость
« Ответ #9 : 14-08-2008 14:36 » 

Я всегда предпочитаю использовать стандартные борландские компоненты, или писать свои, использовать сторонние часто себе дороже. Бывает вроде все работает и слепил программу быстро, а когда начинаешь развивать проект или расширять функционал, вот тогда часто компоненты и приносят сюрприз., хорошо если есть на них исходники, тогда разобравшись с чужим кодом можно что то подправить, а если нет?
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #10 : 15-08-2008 07:39 » new

Согласен, библиотека вроде хорошая, а тут бац. а че-то не работает.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 15-08-2008 18:07 » 

Я всегда предпочитаю использовать стандартные борландские компоненты, или писать свои, использовать сторонние часто себе дороже. Бывает вроде все работает и слепил программу быстро, а когда начинаешь развивать проект или расширять функционал, вот тогда часто компоненты и приносят сюрприз., хорошо если есть на них исходники, тогда разобравшись с чужим кодом можно что то подправить, а если нет?
я тоже похожего мнения Улыбаюсь Хоть и не на дельфи. Своё - оно всегда лучше работает, а кроме того - вникаешь в суть происходящих там явлений Улыбаюсь
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 15-08-2008 18:41 » 

Алексей1153++, zubr сказал в точности наоборот: лучше стандартное использовать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 15-08-2008 18:43 » 

RXL, так я и подтверждаю: использовать всё то, что установилось вместе со средой и написано разработчиками среды , а всё левое как можно реже использовать, писать самому. Просто отличие дельфи в том, что там и так туча всего написана уже Улыбаюсь)
Записан

monrus
Опытный

ru
Offline Offline

« Ответ #14 : 18-08-2008 03:19 » 

Ну вот - пошел флуд Улыбаюсь
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #15 : 20-08-2008 04:54 » 

Все таки перешел на стандартный медиа плеер. Но возникла другая проблема. Не могу изменять громкость у миди-файлов. пробовал через midiOutSetVolume(MP.DeviceID, 123); Не работает. качал с торри всякие бибдиотеки по изменению громкости, тоже. В этих делах я совсем никакой. Поэтому прошу реальной помощи с реальными примерами, но не флуда Улыбаюсь. Если дадите исходничок работающий (изменяющий громкость миди), вообще будет прекрасно.
Записан
zubr
Гость
« Ответ #16 : 20-08-2008 09:25 » 

Код:
uses MMSystem;

var
  volume:DWord;

waveOutGetVolume(WAVE_MAPPER, @volume);
waveOutSetVolume(0, volume);
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #17 : 20-08-2008 10:12 » 

вот, что я выяснил с помощью примера, zubr:
waveOutSetVolume контролирует в контрольной панели звука параметр "звук"
midiOutSetVolume - "синтезатор" или миди
а как контролировать параметр "Общая"?
zubr, спасибо.
Записан
zubr
Гость
« Ответ #18 : 20-08-2008 16:30 » 

monrus, а чем тебя контроль звука не устраивает?
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #19 : 21-08-2008 03:55 » 

контроль звука - в смысле waveOutSetVolume? - он не изменяет громкость проигрывания миди. Улыбаюсь
за изменение громкости миди отвечает midiOutSetVolume - "синтезатор"
а хотелось бы общий менять. Улыбаюсь А-то придется разные пистьа обработчики на миди и на мп3
Записан
zubr
Гость
« Ответ #20 : 21-08-2008 10:06 » 

Хм... Тогда может лучше использовать ActiveX-компонент стандартного Windows-медиа-плеера.

1. Импортируешь библиотеку типов (Project->Import Type Library) Windows Media Player (файл System32\wmp.dll)
Делаешь инсталл. Получишь компонент TWindowsMediaPlayer.
2. Запускаешь медиа-файл:
Код:
WindowsMediaPlayer1.URL:='MyMediaFile.mid';
3. Пуск, стоп, пауза:
Код:
WindowsMediaPlayer1.controls.play;
WindowsMediaPlayer1.controls.stop;
WindowsMediaPlayer1.controls.pause;
4. Громкость:
Код:
WindowsMediaPlayer1.settings.volume:=10;
Сам класс TWindowsMediaPlayer и применяемые интерфейсы найдешь в соответствующем созданном при импорте юните. Плюс описание на интефейсы есть в MSDN. Преимущество - получаешь все возможности WMP, ну и в отличие от методов ...OutSetVolume изменяешь громкость не всей системы, а только медиаплеера в твоем приложении.

З.Ы. Или можно через OLE: CreateOleObject('Windows Media Player'); ...
« Последнее редактирование: 21-08-2008 10:12 от zubr » Записан
monrus
Опытный

ru
Offline Offline

« Ответ #21 : 21-08-2008 10:09 » 

о, ща гляну
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #22 : 21-08-2008 11:39 » 

вот, нашел как изменять общую громкость системы: http://www.prog-gate.pp.ru/fido7.ru.delphi.chainik/5671.html - может кому пригодится.
TWindowsMediaPlayer классная вещь. Хотелось бы узнать, медиаплеер из дельфы, можно ли изменять только его громкость? а не системы, ни звука и не синтезатора Улыбаюсь
Записан
zubr
Гость
« Ответ #23 : 21-08-2008 14:04 » 

Ну нет у дельфийского медиаплеера метода изменения громкости. Можно через mci (не люблю mci) регулировать громкость дельфийского медиаплеера:
Код:
const
   MCI_SETAUDIO = $0873;
   MCI_DGV_SETAUDIO_VOLUME = $4002;
   MCI_DGV_SETAUDIO_ITEM = $00800000;
   MCI_DGV_SETAUDIO_VALUE = $01000000;

type
  MCI_DGV_SETAUDIO_PARMS = record
     dwCallback: DWORD;
     dwItem: DWORD;
     dwValue: DWORD;
     dwOver: DWORD;
     lpstrAlgorithm: PChar;
     lpstrQuality: PChar;
   end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
   param: MCI_DGV_SETAUDIO_PARMS;
begin
 param.dwCallback := 0;
 param.dwItem := MCI_DGV_SETAUDIO_VOLUME;
 param.dwValue := TrackBar1.Position; //громкость
 param.dwOver := 0;
 param.lpstrAlgorithm := nil;
 param.lpstrQuality := nil;
 mciSendCommand(MediaPlayer1.DeviceID, MCI_SETAUDIO,
     MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@param));
end;
Правда с миди это не работает.
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #24 : 26-08-2008 03:12 » 

Ладно, спасибо, zubr. Придется изменением громкости системы пользоваться.
Вот другой вопрос: трекбар отображает текущую позицию песни. Если я например хочу еще и сам, передвигая движок трекбара (onchange), менять позицию в песне, то сама песня начинает как бы эхом отдавать. Как вообще сделать чтобы можно было менять позицию в песне как напр. в Винампе.

procedure TForm1.PosChange(Sender: TObject);
begin

  if (BP.Position = MP.Length) or (Pos.Position = Pos.Max) then MP.Stop
  else begin
    MP.Position := Pos.Position;
    {MP.Play;} end;
 end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Pos.Position := MP.Position;
end;
Записан
zubr
Гость
« Ответ #25 : 26-08-2008 05:09 » 

Смотри что у тебя получается. В таймере ты меняешь позицию тракбара, соответственно вызывается событие тракбара OnChange - в результате выполняется код
Код:
MP.Position := Pos.Position;
MP.Play;
Поэтому такой эффект и происходит. Выход - для изменения позиции медиаплеера пользователем использовать не событие OnChange тракбара, а сообщение WM_LBUTTONUP (отпускания мыши). Так как у тракбара нет своего обработчика данного сообщения, можно использовать 2 варианта:
1. Для перехвата использовать компонент TApplicationEvents:
Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
 If Msg.hwnd <> TrackBar1.Handle then //проверяем от кого сообщение
 exit;
 If (Msg.message <> WM_LBUTTONUP) and (Msg.message <> WM_LBUTTONDOWN) then //проверяем какое сообщение
 exit;
 If Msg.message = WM_LBUTTONDOWN then
 begin
  Timer1.Enabled := False; //если кнопка мыши нажата, то останавливаем таймер
  exit;
 end;
 MediaPlayer1.Position := TrackBar1.Position;
 MediaPlayer1.Play;
 Timer1.Enabled := True;
end;
2. Создаем свой компонент на базе TTrackBar, в котором перехватываем сообщение WM_LBUTTONUP
Код:
TMyTrackBar = class(TTrackBar)
  private
    procedure WMMouseUp(var msg:TMessage); message WM_LBUTTONUP;
  end;
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #26 : 13-02-2009 09:04 » 

а можно использовать компонент ScrollBar у него есть свойство OnScroll при изменении пользователем позиции скролла, т е в таймере ставим  OnChange, а в событии OnScroll изменяем позицию медиаплеера по позиции ScrollPos   
Записан
zubr
Гость
« Ответ #27 : 13-02-2009 09:30 » 

Компонент ScrollBar устанавливает скроллинг, его длину в зависимости от размера вложеннного в него контрола, у тебя же длина скроллинга должна зависеть от размера трека, проигрываемого медиаплеером. То есть в принципе такое сделать можно, подстраивая размер контрола под размер трека, но мне не понятно зачем, чем не устраивает TrackBar?
Записан
alliance
Постоялец

ru
Offline Offline

« Ответ #28 : 13-02-2009 09:37 » 

устраивает, просто при проектировании плэера сразу же наткнулся на проблему с TrackBar описанную выше и взял ScrollBar

Вопрос, я работаю в иср builder c++ 6 (дельфи не изучал ) как изменять во время выполнения звук системы ?
« Последнее редактирование: 13-02-2009 10:17 от Алексей1153++ » Записан
zubr
Гость
« Ответ #29 : 13-02-2009 09:43 » 

Это проблема не TrackBar, а выбранного решения. Аналогичные проблемы возникнут и в ScrollBar. Правильное решение смотри выше.
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines