Среда, 24.04.2024, 21:10
Приветствую Вас Гость

Не ошибается тот, кто ничего не делает.
Но и ничего не делать - ошибка.

Эмиль Кроткий

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Delphi » Создание mp3 плеера на Delphi » как сделать чтоб плеер читал не только mp3 формат но и друге
как сделать чтоб плеер читал не только mp3 формат но и друге
BM_GORAДата: Воскресенье, 24.06.2012, 19:20 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: Offline
как сделать чтоб плеер читал не только mp3 формат но и друге к примеру wave ну и т.д.
и еще один вопрос, как подключить к этому плееру возможность воспроизводить видео, так же различных форматов, что так сказать нужно впихнуть в плеер и куда )
 
xaramamburuДата: Понедельник, 25.06.2012, 21:51 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
BM_GORA,
В данном варианте проигрыватель должен воспроизводить файлы следующих форматов MP3/MP2/MP1/OGG/WAV/AIFF;
В процедуре открытия файла нужно либо убрать строчку OpenDialog1.Filter := 'mp3|*.mp3'; //фильтр для файлов, либо добавить в нее фильтр для остальных форматов.
Для поддержки других форматов необходимо подключать дополнительные библиотеки (BASS_DSHOW - поддержка видео, BASSMIDI - поддержка MIDI, BASSWMA - поддержка WMA и т.д.), которые можно скачать с официального сайта http://www.un4seen.com/ . Примеры их подключения и использования идут вместе с библиотеками. К сожалению целью этих уроков не было создание еще одно WInAmp или AIMP, а всего лишь демонстрация работы с библиотекой BASS. Поэтому, что впихнуть в плеер и куда вам придется искать самому т.к. готовый исходный код вам вряд ли кто то выложит.)))))))))))))
 
BM_GORAДата: Понедельник, 25.06.2012, 23:22 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: Offline
ясно ) спс )
 
Filo$oFДата: Вторник, 03.07.2012, 09:24 | Сообщение # 4
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: Offline
xaramamburu

Ответьте , если знаете решение. Проблема следующая.
Я подключаю сторонние библиотеки для воспроизведения mp4 и прочих форматов не входящих в стандартный bass.
Всё воспроизводит и проигрывает. Файлы формата mp4 спокойно листаются кнопками на плеере (следующий, предыдущий трек). Но при автоматическом переходе по окончанию трека, выскакивает ошибка и выделяется строка

Code
Image4.Left:=round(((Image3.Width-Image4.Width)/BASS_ChannelGetLength(channel, 0))*bass_channelGetPosition(channel,0))+Image3.left;


Вот скрин ошибки. http://cs309729.userapi.com/v309729233/cf3/Svbpns4BT8k.jpg

Добавлено (03.07.2012, 09:24)
---------------------------------------------
А с mp3 всё работает нормально.

 
xaramamburuДата: Среда, 04.07.2012, 20:16 | Сообщение # 5
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Filo$oF,

Вот что по этому поводу говорит интернет:
Invalid floating point operation (Недопустимая операция с плавающей запятой) .

Возможные причины сообщения:

• аргумент функций TRUNC или ROUND не может быть преобразован в целое число, находящееся внутри диапазона типа LONGINT (от -2147483648 до +2147483647);
• отрицательный аргумент функции SQRT (извлечение квадратного корня);
• аргумент функции LN (логарифм) равен нулю или имеет отрицательное значение;
• деление на 0;
• произошло переполнение стека сопроцессора.

Проверяйте значения функций BASS_ChannelGetLength(channel, 0) и bass_channelGetPosition(channel,0), возможно деление на ноль.
 
Filo$oFДата: Среда, 04.07.2012, 21:54 | Сообщение # 6
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: Offline
xaramamburu
Получается, что в момент переходя BASS_ChannelGetLength(channel, 0) равно нулю?
Остальное я что-то не совсем понял. Буду разбираться smile
 
xaramamburuДата: Среда, 04.07.2012, 22:47 | Сообщение # 7
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Filo$oF,
Я сказал, что возможно равно 0. Попробуйте закомментировать пока строку с ошибкой, а значение функции BASS_ChannelGetLength(channel, 0) и bass_channelGetPosition(channel,0) вывести например в Label и посмотреть чему равны значения этих функции. )))))))))
 
Filo$oFДата: Четверг, 05.07.2012, 00:24 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: Offline
Вобщем так, запускал несколько раз программу и крутил один файл mp4.
bass_channelGetPosition(channel,0) - выдаёт всегда разное значение. То есть первые четыре не меняются одни, а четыре другие всегда меняются. Но равным нулю не было. Ошибка всё равно вылетает та же и выделяет строку, которой я вывожу bass_channelGetPosition(channel,0) в label.
BASS_ChannelGetLength(channel, 0) - не меняется.

В общем, даже без вывода в label ругается на эти две строки BASS_ChannelGetLength(channel, 0) и bass_channelGetPosition(channel,0)
 
xaramamburuДата: Четверг, 05.07.2012, 11:13 | Сообщение # 9
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Filo$oF,
Не очень понятно на, что именно ругается на bass_channelGetPosition(channel,0) или на BASS_ChannelGetLength(channel, 0) или на обе вместе. Скорее всего когда файл заканчивается эти функции принимают какие-то непонятные значения, что бы понять надо тестировать сам проект. Но здесь я могу посоветовать следующее:
1. Попробуйте в место:
//если время проигрывания равно длине песни по времени,
if BASS_ChannelGetPosition(channel, 0)=BASS_ChannelGetLength(channel, 0) then
в событии OnTime таймера использовать:
//если канал остановлен,
if BASS_ChannelIsActive(channel)=BASS_ACTIVE_STOPPED then
Возможно заработает.
2. Используйте обработку исключительных ситуаций try...except...end, try...finally...end
При возникновении ошибки в except пропишите выбор следующего файла, освободив перед этим канал. Хотя вариант конечно корявый, но думаю, что работоспособный. smile
 
Filo$oFДата: Четверг, 05.07.2012, 16:18 | Сообщение # 10
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: Offline
xaramamburu

Использовал

//если канал остановлен,
if BASS_ChannelIsActive(channel)=BASS_ACTIVE_STOPPED then

И всё заработало нормально. Спасибо большое. smile

Invalid floating point operation - эта ошибка вылазила на то, что стояло первым. Например, если сперва в label выводится BASS_ChannelGetLength(channel, 0) то и будет выделяться эта строка и наоборот. smile
 
Форум » Delphi » Создание mp3 плеера на Delphi » как сделать чтоб плеер читал не только mp3 формат но и друге
  • Страница 1 из 1
  • 1
Поиск:


Copyright MyCorp © 2024Конструктор сайтов - uCoz