|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
Итак, было раскрыто назначение ещё одной фоловской команды. int soundplay(string wav_file,unsigned int flags); Первый параметр (например, "my_music/ambient/back.wav") - имя и путь к wav-файлу. К началу припишется master_patches (т.е. обычно указываемый путь - относительно папки data). Wav должен быть без заголовка (raw). Второй. Список флагов (спасибо WG): --------------------- soundnormal 0x0000 soundloop 0x0001 sound8bit 0x0000 sound16bit 0x0002 soundmemory 0x0100 soundstreamed 0x0200 soundmono 0x1000 soundstereo 0x2000 --------------------- Флаги складываются. Не забывайте, что Фол понимает только десятичный формат. Так что для проигрывания 8-ми битного моно-файла, нужно указать параметр 4096 (0x1000). А иеперь - пара фокусов. Берём ваш любимый эмбиентный трэк в mp3 (можно и дефметал или что вы там слушаете?) в одну руку, конвертер mp3->wav в другую. Конвертим (не забывайте про raw!), запоминаем параметры (например, 16 бит, стерео), кладём получившуюся wav-у (пусть будет back.wav) в data/music. Пишем такой скрипт: --------------------------------------- variable pause; variable ret; procedure start begin end procedure critter_p_proc begin end procedure map_enter_p_proc begin ret:=soundplay("music/back.wav",8195); //8195=0x2000+0x0002+0x0001 (stereo, 16bit, loop) end procedure talk_p_proc begin if not pause then begin pause:=1; display_msg("Pause"); soundpause(ret); end else begin pause:=0; display_msg("Resume"); soundresume(ret); end end --------------------------------------- Компилируйте, привязывайте к Клинту, начинайте игру. Впечатляет? :-) Ваш бэк, зацикленный, да ещё и с возможностью паузы. Играть одновременно может несколько звуков. Soundplay возвращает "указатель" на проигрываемый звук. Зная указатель, можно проигрыванием управлять. А теперь, друзья, дело за вами :-) Не оставьте наработку недоделанной, поучаствуйте в открытии :-) Итак, несколько вещей, на которые у меня, к сожалению, нет времени: 1. разобраться с командами soundrewind(p1) и sounddelete(p1). 2. попробовать сделать проигрыватель музыки на интерфейсных функциях (используя SelectFileList) 3. попробовать сделать динамическое изменение музыки при переходе в боевой режим 4. разобраться с флагами soundmemory и soundstreamed Дерзайте :-) Я тоже буду потихоньку ковырять. Да, если вы думаете "всё это, конечно, хорошо - но какой идиот приложит к своему моду музыку в wav-ах?" - посмотрите НВ 1.1. Не пожалеете :-) Намётка: музыку можно поставлять и в ogg/mp3. И декодировать в wav при установке мода. (Отредактировал(а) Raven - 19:51 - 28 Янв., 2005) (Добавление от 14:22 - 28 Янв., 2005.) Добавление: если звук многоканальный (стерео), то кроме stereo-флага нужно ставить и streamed-флаг.
|
Отправлено: 12:48 - 28 Янв., 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Впечатляет. Да ещё как. Сразу возникло много идей. Но об этом после. Есть идея как сделать : >>3. попробовать сделать динамическое изменение музыки при переходе в боевой режим Но сначала хочется кое-что узнать. 1)В приведеном скрипте не работает пауза. Soundresume и soundpause - это стандартные функции? 2)попробовал подставить трек длинной в 4 минуты. В вав он занял 50 метров. В mp3 - 5. При начале проигрывания звука фолл сильно подвисает. А потом всё нормально. Кроме того, звук значительно искажается и растягивается, хоть флаги выставлены вроде правильно. Может просто двиг пытается всё подгрузить в память(бывают у него такие заморочки - пытается, редко правда, запихнуть всю библиотеку игры в память. ) Качество wav - 44100 Hz, 16 bit per sample, стерео. Значение выставлено в 8195. Какие есть идеи. (Кстати тачка не слабая, тормозить сама по себе не должна, да и не тормозит.) (Добавление от 14:54 - 28 Янв., 2005.) На момент моего ответа не видел дополнения. Частично становится ясно.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 14:52 - 28 Янв., 2005
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
>>Значение выставлено в 8195. Какие есть идеи. См. добавление. Для стерео - не 0x2002, а 0x2202. Поставь 8706. Иначе Фол будет считать, что звук - на один канал. А тормозов не замечал. Может, с диска читала долго? Или ты растягивание (вдвое в твоём случае) за тормоза принял? >>1)В приведеном скрипте не работает пауза. Soundresume и soundpause - это стандартные функции? Да. Всё работает. Ты точно возврат soundplay-я в вару сохраняешь? Вара - не локальная? Не в этой же процедуре объявлена? (Не подумай, что я тебя за дурака считаю и такие вот вопросы детские задаю :-) Просто - может, проглядел чего?). А с боевым режимом уже начал разобираться, всё, вроде, работает. Но без crossfade-а (плавного перехода по громкости между темами) - звучит не очень. (Добавление от 15:06 - 28 Янв., 2005.) >>На момент моего ответа не видел дополнения. Частично становится ясно. Я тоже твоё добавление мимо глаз пропустил :-)
|
Отправлено: 15:05 - 28 Янв., 2005
|
|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Тормоза действительно были, причём нешуточные. Использовал дополнение. Тормоза исчезли >>Или ты растягивание (вдвое в твоём случае) за тормоза принял? Стоп. А как от растягивания избавиться ? И ещё. Loop - это же проигрывание по кругу? А то проверять и ждать 10 минут влом.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 15:43 - 28 Янв., 2005
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
>>Стоп. А как от растягивания избавиться ? Правильно подобрать флаги. Чтобы точно соответствовали формату читаемого файла. Если у тебя звук растягивается, значит файл в стерео, а флаги установлены на моно (ещё раз - полноценное стерео это soundstereo+soundstreamed - 0x2200) Короче, поиграйся с наборами разных флагов. Стерео/моно, 8/16. 2^2=4 комбинации (4096, 8192, 4610, 8706. Для loop добавь 1). Просто перебери их и всё. Если неправильно подобран бит, то будет хрип. Если неправильно указано число каналов - происходет растягивание (стерео читается как моно) или ускорение (моно читается как стерео). >>И ещё. Loop - это же проигрывание по кругу? А то проверять и ждать 10 минут влом. Да. Это зацикливание.
|
Отправлено: 16:50 - 28 Янв., 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Тут мысль такая возникла... acm в Фоле 22050 Hz. Может быть, wavы тоже должны быть с той же частотой сэмплирования?
|
Отправлено: 16:52 - 28 Янв., 2005
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
>>acm в Фоле 22050 Hz. Может быть, wavы тоже должны быть с той же частотой сэмплирования? У меня и 44100 неплохо работают, вроде.
|
Отправлено: 17:02 - 28 Янв., 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Да, но только с soundstreamed. А что если это вовсе не для того предназначено? ;) Надо проверить. ЗЫ Мне не лень, просто на работе колонок нет :). (Добавление от 17:24 - 28 Янв., 2005.) Да, кстати, флаги можно использовать буквально, это константы, которые "понимает" компилер БИС.
|
Отправлено: 17:22 - 28 Янв., 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Результаты эксперимента: wav 22050 Hz, 16 бит, стерео Проигрывается абсолютно одинаково в обоих случаях: soundplay("17arroyo.wav", sound16bit bwor soundstereo bwor soundstreamed); soundplay("17arroyo.wav", sound16bit bwor soundstereo); Боюсь, soundstreamed имеет несколько иной смысл... ;) (Добавление от 21:46 - 28 Янв., 2005.) Вот инфа. Если нет добавлений, то так и пойдёт в "доку". snd_handler soundplay(string file, int mode) - проигрывает звуковой файл Аргументы: file - имя (путь) к звуковому файлу в формате wav или raw с частотой сэмплирования 22050 Гц mode - режим: soundnormal (0x0000) soundloop (0x0001) sound8bit (0x0000) sound16bit (0x0002) soundmemory (0x0100) soundstreamed (0x0200) soundmono (0x1000) soundstereo (0x2000) Возвращаемое значение: Идентификатор звукового файла (snd_handler) Примечания: Флаги режима могут комбинироваться при помощи bwor, например, для проигрывания 16-битного стерео параметр mode должен быть равен (sound16bit bwor soundstereo), а для "зацикливания" этого звука - (sound16bit bwor soundstereo bwor soundloop). Звуки могут проигрываться одновременно (накладываться). void sounddelete(snd_handler handler) - удалить (отключить) звук, созданный при помощи soundplay Аргументы: handler - идентификатор звукового файла void soundstop(snd_handler handler) - остановить проигрывание звука, созданного при помощи soundplay Аргументы: handler - идентификатор звукового файла void soundpause(snd_handler handler) - пауза звука, созданного при помощи soundplay Аргументы: handler - идентификатор звукового файла void soundresume(snd_handler handler) - возобновить проигрывание звука, остановленного soundpause Аргументы: handler - идентификатор звукового файла Примечания: Если звук был остановлен при помощи soundstop, то проигрывание всё равно возобновляется с момента вызова soundstop, а не с начала файла, так что разница между этими функциями не совсем ясна void soundrewind(snd_handler handler) - по-идее перемотка в начало, но у меня (F2 v1.02d eng) не работает Аргументы: handler - идентификатор звукового файла ЗЫ У меня файлы 44 кГц проигрываются замедленно вне зависимости от наличия флага soundstreamed. Версия F2 1.02d eng.
|
Отправлено: 20:30 - 28 Янв., 2005
|
|
ABel
Партизан
Откуда: Krasnoyarsk Регистрация: Дек. 2002
Всего: 307 сообщений
|
Мне кажется, что Фолл WAVы проигрывать не умеет. Он их, как RAW рассматривает. ВАВовский заголовок тоже проигрывает, в общем.
----- Семь раз об дверь, один - об рельс.
|
Отправлено: 12:08 - 4 Фев., 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Гм... А ведь АБель прав. При проигрывании вава сначала слышится какой-то посторонний шумок. При проигрывании рава такого нет.
|
Отправлено: 18:02 - 4 Фев., 2005
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
Ээээ. Там же написано в первом посте, что нужны именно raw-вавы. Можно и acm-ку "играть", и frm. Но парсить любой скормленный файл фол будет именно как raw wav.
|
Отправлено: 18:29 - 4 Фев., 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Сие и есть неточность :). Raw это raw, а wav это wav :).
|
Отправлено: 17:36 - 5 Фев., 2005
|
|
tracktor
Пользователь
Откуда: Москва Регистрация: Март 2004
Всего: 183 сообщения
|
Объясните лоху, что, собственно такое RAW
|
Отправлено: 20:48 - 5 Фев., 2005
|
|
Perceptron
Модератор
Откуда: Ivanovo Регистрация: Май 2003
Всего: 502 сообщения
|
По-моему, RAW - это WAV без заголовка, т.е. только данные о звуке. По сути, дискретный сигнал. Только неизвестна частота дискретизации и уровень сигнала.
|
Отправлено: 22:17 - 5 Фев., 2005
|
|
tracktor
Пользователь
Откуда: Москва Регистрация: Март 2004
Всего: 183 сообщения
|
Ясно...
|
Отправлено: 23:34 - 5 Фев., 2005
|
|
ROCK
Пользователь
Откуда: г.Коломна Регистрация: Февр. 2005
Всего: 110 сообщений
|
А пример как-нить можно привести? Например как из мп3 переконвертировать в Raw или wav?А чем лучше все это чем ACM? И приведите пример на карте-допустим на Аройо-где се прописывать,куда че кидать!
|
Отправлено: 14:29 - 13 Июня, 2005
|
|
Strongholder
Прилипала MkII
Откуда: Nelly's Bar Регистрация: Май 2004
Всего: 393 сообщения
|
Цитата:
как из мп3 переконвертировать в Raw или wav?
Качни какой-нибудь нормальный аудиоредактор, к примеру Cool Edit [ftp://listsoft.ru/pub/1349/ce2kmain.exe] (лекарство сам найдёшь), открой им нужный мп3шник и сохрани как PCM Raw.
Цитата:
А чем лучше все это чем ACM?
Наличием возможности управлять воспроизведением и пускать несколько звуков одновременно. Больше ничем. И пережимать нельзя...
Цитата:
И приведите пример на карте-допустим на Аройо
Удивительное совпадение! Raven как раз на примере Клинта из Арройо и объяснил всё в первом посте. ©"Эх-х, ленивый форумец пошёл..." Флаги - складывать и конвертить из hex в dec. Остальное вроде и так понятно... Если нужно ещё конкретнее - поставь чёткую цель (что конкретно нужно сделать и к чему прикрутить).
----- Живущий в стране эльфов. Несмотря ни на что.
|
Отправлено: 16:19 - 13 Июня, 2005
|
|
ROCK
Пользователь
Откуда: г.Коломна Регистрация: Февр. 2005
Всего: 110 сообщений
|
А конкретнее-я хочу на новый сделаный город-вставить новую музыку.-Новая локация-а на ней новая музыка! Как сделать?
|
Отправлено: 11:14 - 14 Июня, 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
ROCK, данное обсуждение выходит за рамки исследований. В Техподдержку. А вообще, я в тоске и печали :(. Музыка к картам прописывается в maps.txt через параметр music. Что ещё надо-то?
|
Отправлено: 12:20 - 14 Июня, 2005
|
|
Strongholder
Прилипала MkII
Откуда: Nelly's Bar Регистрация: Май 2004
Всего: 393 сообщения
|
Если к локации привязывать, то действительно проще в ACM перегнать и не мучаться. И пожать можно, кстати... Сказано ж: не оффтопить тут... WG Молчу-молчу... (Отредактировал(а) Strongholder - 17:02 - 14 Июня, 2005)
----- Живущий в стране эльфов. Несмотря ни на что.
|
Отправлено: 12:34 - 14 Июня, 2005
|
|
|
|