monrus
Опытный
Offline
|
|
« : 11-08-2008 10:35 » |
|
Делаю программу для проигрывания муз.файлов. для этого использую BassPlayer 1.92 из torry.ru. MP3 файлы проигрывает а миди нет. почему? Дайте рабочий пример плз.
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 11-08-2008 14:33 » |
|
запустил демо - не найдена куча библиотек )
BASSWMA.DLL BASSCD.DLL BASSMIDI.DLL
|
|
|
Записан
|
|
|
|
monrus
Опытный
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
Опытный
Offline
|
|
« Ответ #4 : 13-08-2008 11:16 » |
|
помогите кто-нибудь
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #5 : 13-08-2008 12:04 » |
|
monrus, поищи в этом разделе форума тему про компонент TMediaPlayer.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|
zubr
Гость
|
|
« Ответ #7 : 14-08-2008 03:59 » |
|
monrus, а что стандартный TMediaPlayer с миди не работает?
|
|
|
Записан
|
|
|
|
monrus
Опытный
Offline
|
|
« Ответ #8 : 14-08-2008 11:59 » |
|
Работает. Но я хочу разобраться с TBassPlayerom. Люблю кривые пути. А если серьезно. просто уже начал с этой библиотекой работать и хочу добить все до конца. Вот и прошу вашей помощи.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #9 : 14-08-2008 14:36 » |
|
Я всегда предпочитаю использовать стандартные борландские компоненты, или писать свои, использовать сторонние часто себе дороже. Бывает вроде все работает и слепил программу быстро, а когда начинаешь развивать проект или расширять функционал, вот тогда часто компоненты и приносят сюрприз., хорошо если есть на них исходники, тогда разобравшись с чужим кодом можно что то подправить, а если нет?
|
|
|
Записан
|
|
|
|
monrus
Опытный
Offline
|
|
« Ответ #10 : 15-08-2008 07:39 » |
|
Согласен, библиотека вроде хорошая, а тут бац. а че-то не работает.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 15-08-2008 18:07 » |
|
Я всегда предпочитаю использовать стандартные борландские компоненты, или писать свои, использовать сторонние часто себе дороже. Бывает вроде все работает и слепил программу быстро, а когда начинаешь развивать проект или расширять функционал, вот тогда часто компоненты и приносят сюрприз., хорошо если есть на них исходники, тогда разобравшись с чужим кодом можно что то подправить, а если нет?
я тоже похожего мнения Хоть и не на дельфи. Своё - оно всегда лучше работает, а кроме того - вникаешь в суть происходящих там явлений
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #12 : 15-08-2008 18:41 » |
|
Алексей1153++, zubr сказал в точности наоборот: лучше стандартное использовать.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 15-08-2008 18:43 » |
|
RXL, так я и подтверждаю: использовать всё то, что установилось вместе со средой и написано разработчиками среды , а всё левое как можно реже использовать, писать самому. Просто отличие дельфи в том, что там и так туча всего написана уже )
|
|
|
Записан
|
|
|
|
|
monrus
Опытный
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
Опытный
Offline
|
|
« Ответ #17 : 20-08-2008 10:12 » |
|
вот, что я выяснил с помощью примера, zubr: waveOutSetVolume контролирует в контрольной панели звука параметр "звук" midiOutSetVolume - "синтезатор" или миди а как контролировать параметр "Общая"? zubr, спасибо.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #18 : 20-08-2008 16:30 » |
|
monrus, а чем тебя контроль звука не устраивает?
|
|
|
Записан
|
|
|
|
monrus
Опытный
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
Опытный
Offline
|
|
« Ответ #21 : 21-08-2008 10:09 » |
|
о, ща гляну
|
|
|
Записан
|
|
|
|
monrus
Опытный
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
Опытный
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
Постоялец
Offline
|
|
« Ответ #26 : 13-02-2009 09:04 » |
|
а можно использовать компонент ScrollBar у него есть свойство OnScroll при изменении пользователем позиции скролла, т е в таймере ставим OnChange, а в событии OnScroll изменяем позицию медиаплеера по позиции ScrollPos
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #27 : 13-02-2009 09:30 » |
|
Компонент ScrollBar устанавливает скроллинг, его длину в зависимости от размера вложеннного в него контрола, у тебя же длина скроллинга должна зависеть от размера трека, проигрываемого медиаплеером. То есть в принципе такое сделать можно, подстраивая размер контрола под размер трека, но мне не понятно зачем, чем не устраивает TrackBar?
|
|
|
Записан
|
|
|
|
alliance
Постоялец
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. Правильное решение смотри выше.
|
|
|
Записан
|
|
|
|
|