Как работать с плейлистом в delphi на библиотеке BASS.DLL?
|
|
Steam | Дата: Четверг, 11.10.2012, 20:09 | Сообщение # 91 |
Рядовой
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Выкладываю вам замечательную функцию, которая обрезает строку в середине: Code function MinimizeText(const Text: String; Canvas: TCanvas; Width: Integer): string; var TmpStr: String; Len: Integer; I: Integer; FirstPart, SecondPart: String; begin TmpStr := Text; Len := Length(TmpStr); FirstPart := ''; SecondPart := ''; I := 1; if Canvas.TextWidth(TmpStr) > Width then TrackName.ShowHint := True else TrackName.ShowHint := False; while Canvas.TextWidth(TmpStr) > Width do begin FirstPart := LeftStr(Text, (Len div 2) - I); SecondPart := RightStr(Text, (Len div 2) - I); TmpStr := FirstPart+'....'+SecondPart; Inc(I); end; Result := TmpStr; end; В uses прописать StrUtils Я использовал эту функцию так, при отрисовке DrawItem ListBox'а, Code Text := ChangeFileExt(ExtractFileName(MinimizeText(Text, PlayList.Canvas, PlayList.Width + 130)), ''); А если пользователь будет изменять размер формы, то при OnResize формы пишем:
Сообщение отредактировал Steam - Четверг, 11.10.2012, 22:50 |
|
| |
trololol | Дата: Суббота, 10.11.2012, 20:07 | Сообщение # 92 |
Рядовой
Группа: Пользователи
Сообщений: 4
Статус: Offline
| как прорисовывать битрейт? везде пишет 1 kbps
function TForm2.GetKBPS(Channel3: DWORD): integer; var FloatLen: FLOAT; Length: Int64; len: integer; begin Length:= 0; Length:= BASS_ChannelGetLength(Channel3, BASS_POS_BYTE);
if Length < 0 then Length:= 0; FloatLen:= BASS_ChannelBytes2Seconds(Channel3, Length); len:=BASS_StreamGetFilePosition(Channel3, BASS_FILEPOS_END); Result:= Round(len / (125 * FloatLen) + 0.5); Bass_StreamFree(Channel3); end;
TextOut(Rect.Left + 10, Rect.Top+15, (form2.Tag(form2.sListbox1.Items[index]).freq) + ' / ' + IntToStr (GetKbps(form2.sListbox1.Itemindex))+' kbps');
что я не так делаю?
|
|
| |
xaramamburu | Дата: Воскресенье, 11.11.2012, 18:52 | Сообщение # 93 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| trololol, Сказать в чем у вас ошибка сложно так, как это только часть кода. Но судя по всему вы не получаете дескриптор канала Channel3. То есть в начале надо сделать так: //освобаждаем канал BASS_StreamFree(Channel1); //пытаемся загрузить файл и получить дескриптор канала Channel3 := BASS_StreamCreateFile(FALSE, PChar(FileName1), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF}); Как и в случае с получением ID3 тегов. Но лучше объединить функцию получения тегов и битрейта в одну например как сделано здесь: http://basicsprog.ucoz.ru/forum/4-4-149-16-1338403355 для получения частоты дискретизации KHz. Сразу хочу предупредить, если песен в плейлисте будет очень много он будет тормозить при прорисовке. Поэтому частоту дискретизации, битрейт ну и т.д. лучше выводить отдельно, например на информационную панель при проигрывании трека, а не в плейлист. )))))))))))
|
|
| |
trololol | Дата: Воскресенье, 11.11.2012, 19:18 | Сообщение # 94 |
Рядовой
Группа: Пользователи
Сообщений: 4
Статус: Offline
| спасибо большое! пытался сделать как Вы сказали, не получилось, привязал к частоте, все заработало! только пришлось в конце функции убрать "+0.5" иначе вместо 320 показывало 321 kbps
|
|
| |
Vlad | Дата: Вторник, 24.09.2013, 20:44 | Сообщение # 95 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| xaramamburu, хочу, чтобы в листбоксе отображались исполнитель и название. но система не распознает функцию readID3Tag. что делать?
|
|
| |
xaramamburu | Дата: Среда, 25.09.2013, 18:25 | Сообщение # 96 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Хотеть не вредно.))) Решений несколько: 1. Написать функцию самому. 2. Найти готовую. 3. Найти готовый модуль по извлечению ID3Tag тегов. и т.д. Смотрите начало темы http://basicsprog.ucoz.ru/forum/4-4-54-16-1336503950 там есть от чего оттолкнуться.))))
|
|
| |
Vlad | Дата: Суббота, 05.10.2013, 23:46 | Сообщение # 97 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| у меня получилось вывести теги на лейблы, но с плейлистом так и не разобрался. попытаюсь отправить Вам мой проект на email. Добавлено (05.10.2013, 23:46) --------------------------------------------- только скажите мне свой email, или скажите, где он указан
|
|
| |
xaramamburu | Дата: Воскресенье, 06.10.2013, 12:17 | Сообщение # 98 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Цитата (Vlad) у меня получилось вывести теги на лейблы, но с плейлистом так и не разобрался. попытаюсь отправить Вам мой проект на email. Вы предлагаете мне разбираться с вашим плейлистом?
|
|
| |
Vlad | Дата: Воскресенье, 06.10.2013, 12:47 | Сообщение # 99 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| xaramamburu, зачем, я хотел чтоб вы посмотрели код
|
|
| |
xaramamburu | Дата: Воскресенье, 06.10.2013, 12:56 | Сообщение # 100 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| xaramamburu@list.ru только пишите на, что я должен посмотреть, а то копаться с чужими проектами нет особого желания, да и времени.))))
|
|
| |
Vlad | Дата: Суббота, 12.10.2013, 21:54 | Сообщение # 101 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| в большинстве плееров, в плейлисте присутствуют 2 полосы выделения. одна двигается при выделении проигрываемой песни, другая появляется при клике по ней. как это реализовать на listbox?
|
|
| |
xaramamburu | Дата: Суббота, 12.10.2013, 23:32 | Сообщение # 102 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Смотрите здесь http://basicsprog.ucoz.ru/forum/4-4-265-16-1349196051 да и вообще в интернете полно информации по отрисовке в ListBox, ищите включайте мозг и переделывайте под ваши нужды.)))
|
|
| |
Vlad | Дата: Суббота, 21.12.2013, 00:01 | Сообщение # 103 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| после долгих мучений у меня получилось вывести теги в плейлист, но есть один нюанс - если в песне теги не заложены, то там отображается пустое место. можно ли вместо них хотя бы имя файла вывести??
|
|
| |
xaramamburu | Дата: Суббота, 21.12.2013, 20:05 | Сообщение # 104 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Проверяйте, если тег пустой, то выводите что нибудь другое.)))
|
|
| |
Vlad | Дата: Вторник, 24.12.2013, 21:22 | Сообщение # 105 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| я понял что это делается через функцию if, но как это реализовать?
|
|
| |
|