191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
1

работа с m3u

09.10.2013, 23:57. Показов 2088. Ответов 13
Метки нет (Все метки)

подскажите, как можно реализовать сохранение содержимого плейлиста в формат m3u, как загружать я разобрался, а с сохранением никак
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2013, 23:57
Ответы с готовыми решениями:

Поиск плейлистов m3u
Здравствуйте. Подскажите пожалуйста, может кто делал нечто похожее или знает как, - как бы...

Открытие плейлиста m3u
Ну реализовать открытие файла с расширением m3u, который содержит следующую структуру: #EXTM3U...

Php parser M3U
Здравствуйте друзя я хочу создать такой сайт https://canlitv.plus . мне нужен парсер или такой...

Парсинг M3U плейлистов
Подскажите пожалуйста, как можно реализовать парсинг m3u плейлистов? мне нужно сделать с него...

13
2475 / 1851 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
10.10.2013, 00:08 2
Это обычный текстовый файл. Если не требуется расширенная информация о треке, то достаточно сохранить полный путь к файлу.
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
10.10.2013, 00:17  [ТС] 3
допустим, что мне надо привести его к такому виду:

#EXTM3U
#EXTINF:288,Baratone - Lessons Feat Katies Ambition (Original Mix)
\Users\1\Music\Baratone feat. Katies Ambition - Lessons (Original Mix).mp3

тогда, если сказать обобщенно, то мне надо сделать цикл в котором записывается время в секундах(bass_channelgetlength), имя файла без расширения и путь, примерно так?
0
2475 / 1851 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
10.10.2013, 00:24 4
Обязательным к записи является #EXTM3U. #EXTINF записывается, если имеется информация по треку: время звучания, исполнитель (может отсутствовать), название (при отсутствии - название файла без расширения).
0
пофигист широкого профиля
4436 / 2926 / 828
Регистрация: 15.07.2013
Сообщений: 16,849
10.10.2013, 00:25 5
artemka2008, в вики забанили?
http://ru.wikipedia.org/wiki/M3U
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
10.10.2013, 02:06  [ТС] 6
в общем сделал я сохранение, вот мой кривой код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.savebClick(Sender: TObject);
var sl:tstringlist; i:integer;
begin
if sd1.Execute then
sl := TStringList.Create;
sl.Add('#EXTM3U');
for i:=0 to pl1.Count-1 do begin
sl.Add(pl1.Items.Strings[i]);
end;
sl.SaveToFile(sd1.FileName);
sl.Free;
end;
только не придумал как сделать добавление длины файла в секундах и теги, если есть

Добавлено через 15 минут
сделал

Добавлено через 5 минут
может кому-нибудь пригодится, вот весь код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.savebClick(Sender: TObject);
var sl:tstringlist; i:integer;
begin
if sd1.Execute then
sl := TStringList.Create;
sl.Add('#EXTM3U');
for i:=0 to pl1.Count-1 do begin
sl.Add('#EXTINF:'+inttostr(lentime1(pl1.items[i])));
sl.Add(pl1.Items.Strings[i]);
end;
sl.SaveToFile(sd1.FileName);
sl.Free;
end;
и функция lentime1

Delphi
1
2
3
4
5
6
7
8
function TForm1.lentime1(filelen1: string): integer;
var
lenstr1: Cardinal;
begin
lenstr1 := BASS_StreamCreateFile(FALSE, PChar(filelen1), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
Lentime1:=trunc(BASS_ChannelBytes2Seconds(lenstr1,BASS_ChannelGetLength(lenstr1,BASS_POS_BYTE)));
BASS_StreamFree(lenstr1);
end;
0
2475 / 1851 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
10.10.2013, 02:27 7
Неправильно
Delphi
1
2
3
4
5
6
  sl.Add('#EXTM3U');
  for I := 0 to pl1.Count - 1 do 
  begin
    sl.Add('#EXTINF:'+inttostr(lentime1(pl1.items[i]))); // здесь должно быть добавлено "," + имя исполнителя (если есть + " - ") + название трека
    sl.Add(pl1.Items.Strings[i]);
  end;
Добавлено через 2 минуты
Для тегов посмотри это, там есть файл, получающий такую информацию.
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
10.10.2013, 02:32  [ТС] 8
angstrom, может и неправильно, но зато работает.
на первое время хватит, а имя исполнителя и название трека я пока что просто не делал, сделаю в дальнейшем.
0
2475 / 1851 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
10.10.2013, 02:41 9
Цитата Сообщение от artemka2008 Посмотреть сообщение
но зато работает
Интересно как? Что читается только время?
"Маловато будет (с)".
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
10.10.2013, 02:44  [ТС] 10
Цитата Сообщение от angstrom Посмотреть сообщение
Интересно как? Что читается только время?
"Маловато будет (с)".
так я же говорю, что считывание тегов просто не делал еще, сделаю завтра т.к. пора спать ложиться.
винамп и другие плееры(WMP например) воспринимают мои плейлисты без проблем.
0
2475 / 1851 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
10.10.2013, 02:48 11
Цитата Сообщение от artemka2008 Посмотреть сообщение
воспринимают мои плейлисты без проблем.
Они, как и положено в таких случаях, просто игнорируют то, что не могут считать.
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
10.10.2013, 15:18  [ТС] 12
я сделал так, чтобы при наличии тегов они писались в плейлист, но не получается сделать так, чтобы при отсутствии тегов в плейлист добавлялось имя файла без расширения, вот мой код:

сохранение:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.savebClick(Sender: TObject);
var sl:tstringlist; i:integer;
begin
if sd1.Execute then
sl := TStringList.Create;
sl.Add('#EXTM3U');
for i:=0 to pl1.Count-1 do begin
sl.Add('#EXTINF:'+(inttostr(lentime1(pl1.items[i])))+','+plt(pl1.Items[i]));
sl.Add(pl1.Items.Strings[i]);
end;
sl.SaveToFile(sd1.FileName);
sl.Free;
end;
функция получения длины файла в секундах:

Delphi
1
2
3
4
5
6
7
8
function TForm1.lentime1(filelen1: string): integer;
var
lenstr1: Cardinal;
begin
lenstr1 := BASS_StreamCreateFile(FALSE, PChar(filelen1), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
Lentime1:=trunc(BASS_ChannelBytes2Seconds(lenstr1,BASS_ChannelGetLength(lenstr1,BASS_POS_BYTE)));
BASS_StreamFree(lenstr1);
end;
функция считывания тегов:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function TForm1.plt(filetags: string): string;
var tagsstr:cardinal;
begin
tagsstr := BASS_StreamCreateFile(FALSE, PChar(filetags), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
if (string(TAGS_Read(tagsstr, '%TITL'))='') and
(string(TAGS_Read(tagsstr, '%ARTI'))='') then
  begin
  plt:=changefileext(filetags,'');
  end
  else begin
  plt:=(string(TAGS_Read(tagsstr, '%ARTI')))+' - '+(string(TAGS_Read(tagsstr, '%TITL')));
  end;
BASS_StreamFree(tagsstr)
end;
понимаю, что в последней функции накосячил в условии, но не знаю как записать по-другому.
0
2475 / 1851 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
10.10.2013, 15:41 13
Может так?
Delphi
1
2
3
4
5
6
  if (string(TAGS_Read(tagsstr, '%TITL')) <> '') and (string(TAGS_Read(tagsstr, '%ARTI')) <> '') then
    Result := (string(TAGS_Read(tagsstr, '%ARTI'))) + ' - ' + (string(TAGS_Read(tagsstr, '%TITL')))
  else if (string(TAGS_Read(tagsstr, '%TITL')) <> '') and (string(TAGS_Read(tagsstr, '%ARTI')) = '') then
    Result := (string(TAGS_Read(tagsstr, '%ARTI'))) + ' - ' + ChangeFileExt(filetags, '')
  else
    Result := ChangeFileExt(filetags, '');
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
10.10.2013, 21:09  [ТС] 14
Цитата Сообщение от angstrom Посмотреть сообщение
Может так?
Delphi
1
2
3
4
5
6
  if (string(TAGS_Read(tagsstr, '%TITL')) <> '') and (string(TAGS_Read(tagsstr, '%ARTI')) <> '') then
    Result := (string(TAGS_Read(tagsstr, '%ARTI'))) + ' - ' + (string(TAGS_Read(tagsstr, '%TITL')))
  else if (string(TAGS_Read(tagsstr, '%TITL')) <> '') and (string(TAGS_Read(tagsstr, '%ARTI')) = '') then
    Result := (string(TAGS_Read(tagsstr, '%ARTI'))) + ' - ' + ChangeFileExt(filetags, '')
  else
    Result := ChangeFileExt(filetags, '');
ваш код тоже не работает как надо

Добавлено через 4 часа 43 минуты
up

Добавлено через 39 минут
все, разобрался, сделал. использовал audiogenie3.dll и audiogenie3.pas
окончательно код функции выглядит так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
function TForm1.plt(filetags: string): string;
var tagsstr:cardinal;
begin
tagsstr := BASS_StreamCreateFile(FALSE, PChar(filetags), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
if ag3.ID3V1ExistsW=false  then
  begin
  plt:=changefileext(extractfilename(filetags),'');
  end
  else begin
  plt:=(string(TAGS_Read(tagsstr, '%ARTI')))+' - '+(string(TAGS_Read(tagsstr, '%TITL')));
  end;
BASS_StreamFree(tagsstr);
end;
ag3:TAudioGenie3;
может кому пригодится
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2013, 21:09

Конвертация TXT в M3U
Прошу помощи! Имеется текстовой файл вида: Wayfloe - Boy (ft. Alexiane) ...

Регулярное выражение для *.m3u
Здравствуйте! Подскажите, как с помощью регулярного выражения вытянуть адреса из *.m3u и *.pls...

Вытащить m3u плейлист из андроид приложения
Есть андроид приложение которое транслирует тв каналы, хотелось бы вытащить эти каналы в формате...

Загрузить данные m3u в определенный ListBox
На форме есть несколько ListBox в которые необходимо загрузить плейлисты m3u. В один плейлист нужно...

Доработать preg_match_all для парсера плейлиста m3u
Приветствую. Прошу помощи. Есть парсер Прекрасно разбирает плейлист из примера В нем нет...

Как вытянуть имя исполнителя из m3u файла?
Добрый день. Практически, написал плеер средствами Windows Media Player. Всё работает отлично, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.