Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 14:00   #11
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
о да, зашибись строго.
LPSTR или же LPWSTR
я с этим ни разу еще не сталкивался
cargo29 вне форума Ответить с цитированием
Старый 29.05.2011, 14:22   #12
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

:conf used:
Изображения
Тип файла: jpg Безымянный.JPG (133.4 Кб, 117 просмотров)
cargo29 вне форума Ответить с цитированием
Старый 17.06.2011, 15:18   #13
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Ты намешал переменных, там анси и юникод в перемешку вот и получил знаки вопросов.
Exception вне форума Ответить с цитированием
Старый 02.07.2011, 13:19   #14
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Цитата:
Сообщение от Exception Посмотреть сообщение
Ты намешал переменных, там анси и юникод в перемешку вот и получил знаки вопросов.
там походу не в том дело...когда в плеере прогрывает так же отображаеться...
cargo29 вне форума Ответить с цитированием
Старый 02.07.2011, 13:40   #15
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Можешь скинуть в личку исходный код а я посмотрю на досуге что у тебя не так иначе так и будем тянуть кота за хвост.
Exception вне форума Ответить с цитированием
Старый 13.07.2011, 16:08   #16
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Цитата:
Сообщение от Exception Посмотреть сообщение
Можешь скинуть в личку исходный код а я посмотрю на досуге что у тебя не так иначе так и будем тянуть кота за хвост.
кинул
cargo29 вне форума Ответить с цитированием
Старый 20.07.2011, 12:51   #17
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Посмотрел код. В личке больше 4000 символов не отправляется поэтому пишу сюда. У меня нет компонентов, которые ты используешь в своем проекте, поэтому прилагаю куски кода из своего демо-проекта к сообщению.

Цитата:
function BassUtils_GetMeta(pszMeta: PAnsiChar; pszValue: AnsiString): Utf8String;
var
meta: PAnsiChar;
len : Integer;
utf8: Utf8String;
begin
Result := '';
meta := pszMeta;
while (Length(meta) > 0) do
begin
len := Length(pszValue);
utf8 := Copy(meta, 1, len);
if (UpperCase(utf8) = UpperCase(pszValue)) then
begin
utf8 := Copy(meta, len + 1, Length(meta) - len);
Result := URLDecode(utf8);
end;
meta := meta + Length(meta) + 1;
end;
end;
Цитата:
function BassUtils_CatCast(pszArtist, pszTitle: Utf8String): WideString;
var
artist: WideString;
title : WideString;
begin
Result := '';
artist := Utf8Decode(pszArtist);
title := Utf8Decode(pszTitle);
if ((artist = '') and (title <> '')) then
Result := title
else
if ((artist <> '') and (title = '')) then
Result := artist
else
if ((artist <> '') and (title <> '')) then
Result := Format('%s - %s', [artist, title])
end;
Цитата:
function BassUtils_GetCastName(stream: HSTREAM): WideString;
var
meta: PAnsiChar;
artist: Utf8String;
title: Utf8String;
TitlePos: Integer;
DelimeterPos: Integer;
info: BASS_CHANNELINFO;
begin
Result := '';
meta := BASS_ChannelGetTags(stream, BASS_TAG_META);
TitlePos := Pos('StreamTitle=', meta);
if (TitlePos <> 0) then
begin
DelimeterPos := Pos(';', meta);
if (DelimeterPos = 0) then
title := Copy(meta, TitlePos + 13, Length(meta) - TitlePos - 13)
else
title := Copy(meta, TitlePos + 13, DelimeterPos - TitlePos - 14);
Result := Utf8Decode(title);
end;
if (Result = '') then
begin
title := '';
artist := '';
ZeroMemory(@info, SizeOf(BASS_CHANNELINFO));
BASS_ChannelGetInfo(stream, info);
case info.ctype of
BASS_CTYPE_STREAM_OGG:
begin
meta := BASS_ChannelGetTags(stream, BASS_TAG_OGG);
if (meta <> nil) then
begin
artist := BassUtils_GetMeta(meta, 'artist=');
title := BassUtils_GetMeta(meta, 'title=');
Result := BassUtils_CatCast(artist, title);
end;
end;
BASS_CTYPE_STREAM_WMA,
BASS_CTYPE_STREAM_WMA_MP3:
begin
meta := BASS_ChannelGetTags(stream, BASS_TAG_WMA_META);
if (meta <> nil) then
begin
title := BassUtils_GetMeta(meta, 'caption=');
if (title = '') then
begin
artist := BassUtils_GetMeta(meta, 'artist='); //'artist=', '&title='
title := BassUtils_GetMeta(meta, 'title='); //'title=', '&album='
Result := BassUtils_CatCast(artist, title);
end
else
Result := Utf8Decode(title);
end;
if (meta = nil) then
meta := BASS_ChannelGetTags(stream, BASS_TAG_WMA);
if (meta <> nil) then
begin
artist := BassUtils_GetMeta(meta, 'author=');
title := BassUtils_GetMeta(meta, 'title=');
Result := BassUtils_CatCast(artist, title);
end;
end;
else
begin
meta := BASS_ChannelGetTags(stream, BASS_TAG_ICY);
if (meta = nil) then
meta := BASS_ChannelGetTags(stream, BASS_TAG_HTTP);
if (meta <> nil) then
begin
title := BassUtils_GetMeta(meta, 'icy-name:');
if (title = '') then
title := BassUtils_GetMeta(meta, 'ice-name:');
if (title = '') then
title := BassUtils_GetMeta(meta, 'x-audiocast-name:');
Result := BassUtils_CatCast('', title);
end;
end;
end;
end;
end;
Код в принципе рабочий. Используй поменьше глобальных переменных, все равно в таймере у тебя можно на локальных m и p сделать. И я не рекомендую использовать StrPas для конвертирования мета данных в строку, мало ли как изменят ее в заголовочных файлах, лучше через BassUtils_GetMeta, а то намешаешь еще еще в кучу разнокодировочных функций что потом не разгребешь.
Exception вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
Создание потока GoldP Win Api 0 14.05.2010 21:28
Два потока tigrend Общие вопросы .NET 6 24.04.2010 08:25
Создание потока Хохол Общие вопросы .NET 0 21.11.2009 16:44