Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 19.10.2010, 22:41   #1
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 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 в 02:47.
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо Kudesnic за это полезное сообщение:
ABTOMAT (19.10.2010), Android (07.12.2010), Crayzi (13.11.2010), Harter (08.12.2010), maxturbo (19.10.2010), Nex (20.10.2010), St_AnGer (07.12.2010)
Старый 07.12.2010, 11:43   #2
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Я хочу усовершенствовать эту функцию, и у меня возникли трудности.
Как с помощью блитза можно "прочитать" обычный виндосовский ярлык?
То есть как перейти в директорию, на которую ссылается этот ярлык?
(Offline)
 
Ответить с цитированием
Старый 07.12.2010, 13:35   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,916 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Пропарсь. Не думаю, что формат сложен
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 07.12.2010, 13:58   #4
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 618 полезных сообщений
(для 2,416 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Угу.
Измени в тотал командрс(или другом файловом менеджере) расширение .lnk на .txt например. И там в середине будет написан полный адрес файла на который он ссылается.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kudesnic (08.12.2010)
Старый 07.12.2010, 15:23   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,916 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Den что за изврат?
Kudesnic:
да просто перетащи на ярлык блокнота lnk-файл, или в открытый блокнот его брось.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kudesnic (08.12.2010)
Старый 08.12.2010, 13:51   #6
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 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, 15:23   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: Планета Земля
Сообщений: 4,126
Написано 2,322 полезных сообщений
(для 6,461 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

http://www.stdlib.com/art6-Shortcut-...ormat-lnk.html
__________________
Retry, Abort, Ignore? █
Пека: AMD Athlon II x4 2.6Ghz; 8Gb ram; Nvidia Geforce GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
Harter (08.12.2010), HolyDel (26.12.2010), impersonalis (08.12.2010), Kudesnic (24.10.2011), RBK (09.12.2010)
Старый 08.12.2010, 18:45   #8
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Конечно спасибо.
Я только понял, что мне нужно разбираться самому. Но самому никак, значит проще тупо забить на это дело.
Жаль что знающие люди часто вместо нормальной помощи отвечают загадками

(Offline)
 
Ответить с цитированием
Старый 08.12.2010, 18:52   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 25.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,397
Написано 5,228 полезных сообщений
(для 15,131 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Какие загадки? Тебе дали ссылку на полное описание формата lnk, где чётко написано, в каком порядке там что находится, и где лежит интересующая тебя информация.
Читать её за тебя и писать код никто не будет, увы...
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 08.12.2010, 19:33   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,916 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Задача элементарная (осбенно, если только адрес взять), но времени мало. Автор - я начинаю сомневаться в качестве первого поста =(
апд чо-то, похоже, я не зря волнуюсь; постараюсь в ближ время показать вариант
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.12.2010, 21:23   #11
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,918
Написано 3,406 полезных сообщений
(для 9,309 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

А мне кажется что стандартный ShellExecute ярлыку сам сделает всё за вас.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tormoz (09.12.2010)
Старый 09.12.2010, 00:42   #12
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

мне кажется он топикстартер хочет чтобы была возможность скинуть в папку с мызыкой ярлык на папку, и программа искала там
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Dream за это полезное сообщение:
ABTOMAT (09.12.2010), impersonalis (09.12.2010), Kudesnic (09.12.2010), Reks888 (09.12.2010)
Старый 09.12.2010, 15:23   #13
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

Сообщение от ABTOMAT Посмотреть сообщение
Какие загадки? Тебе дали ссылку на полное описание формата lnk, где чётко написано, в каком порядке там что находится, и где лежит интересующая тебя информация.
Читать её за тебя и писать код никто не будет, увы...
Я не прошу написать код
Где лежит адрес папки это и в блокноте видно.
Просто блитз ее не видит(
(Offline)
 
Ответить с цитированием
Старый 09.12.2010, 23:11   #14
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 05.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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kudesnic (09.12.2010)
Старый 10.12.2010, 00:02   #15
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Сканирование папки с музыкой с неизвестным содержимым

RBK
Спасибо огромное!!!
Больше вопросов нет
Дальше я сам)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 08:06.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com