|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
20.10.2010, 02:41
|
#1
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Сканирование папки с музыкой с неизвестным содержимым
Иногда в компьютерных играх хочется поменять музыку на что-то свое. Для этого приходится конвертировать и переименовывать свои музыкальные файлы под игровые. И добавлять путем их замены.
Например как в "Героях 3"
Но приятно когда можно только скопировать любимую музыку в игровую папку, ничего не переделывая, И она без проблем воспроизводилась.
Например как в TES4: Oblivion или частично GTA San Andreas
Чтобы музыка в ваших играх ограничивалась только содержимым вашей папки с игровой музыкой, а не конкретным списком, я сделал функцию, которая просканирует указанную папку и запишет пути к каждому музыкальному файлу (.mp3 .wav .ogg) в тип, а еще возвратит количество отсканированного.
;Вся сканированная музыка записывается в type musfile.musfile
Type foldermusic
Field n$
End Type
Type tfoldermusic
Field n$
End Type
Type ynfoldermusic
Field n$
End Type
Type musfile
Field name$ ;путь к файлу
Field n; порядковый номер (можно использовать для перемешивания списка музыки)
End Type
Global cdir$
Function musicscan(musicdir$=".")
nmus=0
For musfile.musfile=Each musfile
Delete musfile
Next
cdir=CurrentDir()
ChangeDir musicdir
foldermusicf()
DebugLog "FOLDERS"
For foldermusic.foldermusic=Each foldermusic
DebugLog foldermusic\n
Next
For foldermusic.foldermusic=Each foldermusic
myDir=ReadDir(foldermusic\n)
Repeat
file$=NextFile$(myDir)
If file$="" Then Exit
If FileType(foldermusic\n+"\"+file$) <> 2
If Right$(file$,4)=".mp3" Or Right$(file$,4)=".wav" Or Right$(file$,4)=".ogg"
nmus=nmus+1
musfile.musfile=New musfile
musfile\name=foldermusic\n+"\"+file$
musfile\n=nmus
EndIf
EndIf
Forever
CloseDir myDir
Next
DebugLog "FILES"
For musfile.musfile=Each musfile
DebugLog musfile\n+" "+musfile\name
Next
DebugLog nmus+" tracks"
For foldermusic.foldermusic=Each foldermusic
Delete foldermusic
Next
For tfoldermusic.tfoldermusic=Each tfoldermusic
Delete tfoldermusic
Next
For ynfoldermusic.ynfoldermusic=Each ynfoldermusic
Delete ynfoldermusic
Next
ChangeDir cdir
Return nmus
End Function
Function foldermusicf(f$=".")
folder$=f$
myDir=ReadDir(folder$)
Repeat
file$=NextFile$(myDir)
If file$="" Then Exit
If FileType(file$) = 2 Then
If file$<>"." And file$<>".."
foldermusic.foldermusic=New foldermusic
foldermusic\n=file$
EndIf
End If
Forever
Repeat
For ynfoldermusic.ynfoldermusic=Each ynfoldermusic
Delete ynfoldermusic
Next
For foldermusic.foldermusic=Each foldermusic
ynfoldermusic.ynfoldermusic=New ynfoldermusic
ynfoldermusic\n=foldermusic\n
Next
okfoldermusic=0
For foldermusic.foldermusic=Each foldermusic
myDir=ReadDir(foldermusic\n)
Repeat
file$=NextFile$(myDir)
If file$<>"." And file$<>".."
If file$="" Then Exit
If FileType(foldermusic\n+"\"+file$) = 2 And ynfoldermusic(foldermusic\n+"\"+file$)=True
okfoldermusic=okfoldermusic+1
tfoldermusic.tfoldermusic=New tfoldermusic
tfoldermusic\n=foldermusic\n+"\"+file$
End If
EndIf
Forever
CloseDir myDir
Next
For tfoldermusic.tfoldermusic=Each tfoldermusic
foldermusic.foldermusic=New foldermusic
foldermusic\n=tfoldermusic\n
Delete tfoldermusic
Next
Until okfoldermusic=0
foldermusic.foldermusic=New foldermusic
foldermusic\n="."
End Function
Function ynfoldermusic(tfl$)
ynf=True
For ynfoldermusic.ynfoldermusic=Each ynfoldermusic
If ynfoldermusic\n=tfl Then ynf=False
Next
Return ynf
End Function
Данный код удобно сохранить в файл, а потом его инклудить
Использование:
Вызвать musicscan(dir$)
где dir$ -путь к папке с игровой музыкой
Затем работать в цикле For musfile.musfile=Each musfile c переменными musfile\n и musfile\name, что соответствует порядковому номеру и пути к каждому музыкальному файлу
Пример:
Include "musicscan.bb"
dir$="data\music\"
nmusic=musicscan(dir)
shuffle=Rand(nmusic)
For musfile.musfile=Each musfile
If musfile\n=shuffle
PlayMusic dir+musfile\name
Print "Now playing: "+musfile\n+" track"
EndIf
Next
WaitKey()
End
В данном примере сканируется папка music функцией scanmusic() и заодно в переменную nmusic записывается количество сканированного. Затем в цикле проигрывается музыка со случайным порядковым номером musfile\n который соответствует пути musfile\name
Последний раз редактировалось Kudesnic, 21.10.2010 в 06:47.
|
(Offline)
|
|
Эти 7 пользователя(ей) сказали Спасибо Kudesnic за это полезное сообщение:
|
|
07.12.2010, 14:43
|
#2
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Я хочу усовершенствовать эту функцию, и у меня возникли трудности.
Как с помощью блитза можно "прочитать" обычный виндосовский ярлык?
То есть как перейти в директорию, на которую ссылается этот ярлык?
|
(Offline)
|
|
07.12.2010, 16:35
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Пропарсь. Не думаю, что формат сложен
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
07.12.2010, 16:58
|
#4
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Угу.
Измени в тотал командрс(или другом файловом менеджере) расширение .lnk на .txt например. И там в середине будет написан полный адрес файла на который он ссылается.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.12.2010, 18:23
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Den что за изврат?
Kudesnic:
да просто перетащи на ярлык блокнота lnk-файл, или в открытый блокнот его брось.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.12.2010, 16:51
|
#6
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
file=OpenFile("folder.lnk")
string$=ReadLine$(file)
CloseFile file
DebugLog string
End
Попытался таким способом вытянуть текст из ярлыка в строковою переменную string. И, к сожалению туда, записывается только первая буква "L"
Но стоит только с помощью блокнота "открыть" файл ярлыка и тут же его сохранить, то после этого блитз нормально читает всю строку. Правда после такого "сохранения" ярлык становится не читаемым для windows.
Есть ли другой способ вытаскивания текста из файла?
|
(Offline)
|
|
08.12.2010, 18:23
|
#7
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
08.12.2010, 21:45
|
#8
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Конечно спасибо.
Я только понял, что мне нужно разбираться самому. Но самому никак, значит проще тупо забить на это дело.
Жаль что знающие люди часто вместо нормальной помощи отвечают загадками
|
(Offline)
|
|
08.12.2010, 21:52
|
#9
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Какие загадки? Тебе дали ссылку на полное описание формата lnk, где чётко написано, в каком порядке там что находится, и где лежит интересующая тебя информация.
Читать её за тебя и писать код никто не будет, увы...
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
08.12.2010, 22:33
|
#10
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Задача элементарная (осбенно, если только адрес взять), но времени мало. Автор - я начинаю сомневаться в качестве первого поста =(
апд чо-то, похоже, я не зря волнуюсь; постараюсь в ближ время показать вариант
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
09.12.2010, 00:23
|
#11
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
А мне кажется что стандартный ShellExecute ярлыку сам сделает всё за вас.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
09.12.2010, 03:42
|
#12
|
быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
мне кажется он топикстартер хочет чтобы была возможность скинуть в папку с мызыкой ярлык на папку, и программа искала там
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
|
|
09.12.2010, 18:23
|
#13
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Сообщение от ABTOMAT
Какие загадки? Тебе дали ссылку на полное описание формата lnk, где чётко написано, в каком порядке там что находится, и где лежит интересующая тебя информация.
Читать её за тебя и писать код никто не будет, увы...
|
Я не прошу написать код
Где лежит адрес папки это и в блокноте видно.
Просто блитз ее не видит(
|
(Offline)
|
|
10.12.2010, 02:11
|
#14
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
Сообщение от Kudesnic
Я не прошу написать код
Где лежит адрес папки это и в блокноте видно.
Просто блитз ее не видит(
|
Блитз видит достаточно.
file=OpenFile("folder.lnk")
While Not Eof(file)
b=ReadByte(file)
If b>31 Then String$=String$+Chr$(b)
Wend
CloseFile file
DebugLog String$
Stop
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.12.2010, 03:02
|
#15
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Ответ: Сканирование папки с музыкой с неизвестным содержимым
RBK
Спасибо огромное!!!
Больше вопросов нет
Дальше я сам)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:33.
|