![]() |
Вот у меня вопросик появился - сделать следущим образом:
есть папка - music, в ней храниться определенное количество файлов в .mp3 формате(количество меняеться!!!)Так вот, как сделать, чтобы Блитц открывал все что там есть, и проигрывал в случайном порядке? |
Тебе нужно посмотреть описание использования команды NextFile$ в хелпе или >здесь<.
|
Код:
SeedRnd(MilliSecs()) |
Замечание: если содержимое папки МЬЮЗИК меняется только ДО (после) запуска игры, то лучше сделать массив, в котором хранить ПУТИ к файлам и с ним работать (как путь найти impersonalis разъяснил выше).
А то перебирать ВСЕ файлы поновой, чтоб что-то выбрать.... |
Цитата:
|
Если файлов много, то возможны задержки при вызове функции.
Или нет? Типы... Массив удобнее: PlayMysic (musicList$(Rand(MAX_KOLVO_MUSIC))) Пусть Dizels использует типы, или весь твой код, а я буду массив! ;) |
Как насчет такого варианта.
Позволяет избежать тормозов в главном цикле цикле и знаменитых глюков команды PlayMusic за счет повышения времени загрузки. :) Код:
Dir$="D:\KrutajaGama\Music" |
Diplomat, а сколько памяти ест музыка? Столько же, сколько на ХДД? Если у меня 20 треков, то это будет весить около 50-70 мб, и все это в память толкать?!
Не знаю как у вас, а у меня команда ChannelPlaying() тормозит, поэтому я вызываю ее 1 раз за 2-5 секунд, чаще смысла нет. Тогда все ок, а если каждый раз при проходе цикла звать, то тормозит :( Я массив так же "делаю", но вместо хендлов загоняю пути к файлам... |
Цитата:
А насчет памяти- то 70 метров- это перегиб. Ну пусть 5 треков МР3- это 50Мб максимум... При обьеме оперативы в 1Гиг (ну или даже 256Мб) это условие перестает играть каку-либо роль... :ok: Другое дело, что длинный трек может грузиться 1-5 секунд, а это уже серьезный недостаток... :unsure: |
Цитата:
|
видимо воспроизводить потоково несудьба :o
|
Цитата:
по-моему было-бы глупо... |
мдя... когда ты слушаеш winamp (или че там еще) и устанавливаеш прогу , сидиш в аське , мучаеш paint :) то у тебя музычка тормозит ?!
есть такое заветное слово - буферизация :) притом я же неговорил декодировать музыку в блице - для етого есть нормальные либы bass.dll например :)) |
Цитата:
|
для раскодировки надо примерно 1-3 метра озу... может даже меньше (смотря какой буфер поставиш)
|
Есть еще такая прога Cool Edit 2000 называется, я ей обычно смотрю, там когда файл открываешь, тыкаешь на название файла, а он тебе всю поднаготную о нем в том числе и размер в "распакованном" виде. :)
|
вот непонимаю я тебя - зачем грузить весь файл в память ? может еще все текстуры игры загрузим в память а использовать будем только те что надо :o
ps. смотри атач |
Я использовал код, который дал impersonalis, он меня вполне устраивает, но вот досада, файл выбираеться, потом играет, а вот после него тихо как в танке, а надо, чтобы следущий файл играл(тоже случайный).
|
Тихо только в танке с выключенным двигателем!
С работающим - очень наоборот :) С его кодом все нормально, ты присмотрись внимательнее к вызову команды PlayMusic, и обнаружишь переменную channel, в которую записан результат вызова плеймьюзик. В главном цикле проверяешь состояние канала командой ChannelPlaying (channel). Если получаешь от нее НОЛЬ, то заново зовешь функцию SelectRandMusic Еще сделай channel глобальной переменной. |
Что-то у меня не получилось, подскажите:
Код:
SeedRnd(MilliSecs()) |
Вот рабочий пример:
Код:
SeedRnd(MilliSecs()) 1. Сделал проверку играет ли щас муза или нет, если нет, то заново запускаем 2. ЛОКАЛЬНУЮ переменную channel удалил к чертям! Значение локальных переменных ТЕРЯЕТСЯ при выходе из функции. |
Все хорошо, вот только проблемка, теперь все играет, музыка меняеться, только вот игра не загружаеться:)Я end в начале убрал, но все равно проблема осталась!
|
2 Жека:
channel Локальна в теле функции, но её значение возвращается через return - так что, ради каких чертей ты её убрал? А вот юзание глобальных переменных ( ну уж по крайней мере - здесь) - плохой стиль. Код:
SeedRnd(MilliSecs()) не понял - как это: музыка играет,а игра не грузится? надо полагать - так: вычлени цикл из пример Жеки в функцию а-ля: Код:
Function UpdateMusic(channel) Код:
;..... либо объяви её перед главным циклом либо уж пихай в глобал |
Кстати после описанных манипуляций - нигде вызво функции SelectRandMusic прописывать необязательно - во время выполнения игры программа на первом же кадре обнаружит отсутствие фоновой музыки и выполнит необходимые действия
|
Ага, зря зарезал, на Return не обратил внимания...
|
Заранее прошу прощения за мою тупость, вот код, который я вставил, согласно вашим высказываниям:
Код:
SeedRnd(MilliSecs()) |
Остаеться начальная проблема:проигрываеться обин файл, а дальше тишина.
|
???Подскажите!Или если я надоел с этим вопросом, то так и скажите
|
А ты эту строчку
channel=UpdateMusic(channel) в основном цикле пишешь? |
Ну вроде да, посмотри выше - самая последняя сторчка кода
|
Я вижу, что последняя строчка. Покажи тогда код, в котором ты вызываешь функцию, а не одну строчку этого кода.
|
Основной цикл здесь - цикл в котором выполняются ф-ции обновления и логики NPC а так же рендер и просчёт коллизий. Судя по результату - один файл играет - ты пишешь это не в главном цикле.
|
Я понимаю, что я что-то делаю не так, но вот что именно - ни как не доходит. Вот еще раз ВЕСЬ код который у меня написан для воспроизведения музыки:
Код:
Graphics3D 1024,768,32,1 Код:
channel=UpdateMusic(channel) |
Код:
while not keyhit(1) |
Часовой пояс GMT +4, время: 20:04. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot