PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Программирование для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=101)
-   -   Эксперименты... (https://www.pspx.ru/forum/showthread.php?t=37390)

Mortem 22.05.2007 02:27

Таймером я ещё хочу заняться позже, как с SDK лучше разберусь. Т.к. то, что он сейчас возвращает очень как-то слабо похоже на миллисекунды... Точнее иногда это миллисекунды, но порой его пробивает... В общем таймер у меня в листе исправлений записан.
Сегодня выложу последний релиз с твоими изменениями на сайте. Спасибо.
И буду сегодня пытаться откомпилить то, что в блокнотике накодил в отпуске! ^__^

добавлено через 6 часов 12 минут
Кстати, нет желания подключить к SDK ещё и TinyXML и Lua? (:
В принципе обе библиотеки есть в версиях для PSP, только откомпилить нужно да закинуть в общий архив.
Могу даже простые примеры, в рамках MGF, написать по работе с этими либами. Очень бы здорого было.

wSlava 22.05.2007 10:15

TinyXML закину обязательно, а LUA на слуху, но чесно говоря вживую не видел еще :) этож вроде не библиотека к SDK, а приложение - интерпретатор. Короче надо посмотреть.

Mortem 22.05.2007 12:41

Не, это либа, реализующая скриптовый компилятор. Собственно LuaPlayer и написан с использованием этой либы. Т.е. как минимум должны быть исходы, оптимизированные под PSP. К тому же вроде как исходы LuaPlayer доступны...

добавлено через 2 минуты
Жду вот пока скачается последний SDK - хочу сразу пример со звуком накатить в новой версии.
Плясал с бубном вокруг таймера - фигня какая-то. Пробовал несколько вариантов с форума ps2dev - без толку. Сейчас вот качаю разные исходники - пытаюсь высмотреть, как оно там работает. Глядишь когда скачается новый SDK - заборю эту проблему. (:

wSlava 22.05.2007 14:22

Вот что нарыл: TinyXML это не либа, а просто опенсорсные исходники под любой C/C++ компайлер, я выкладывал их:
https://www.pspx.ru/forum/showpost.ph...64&postcount=2
А вот чтото типа примера использования (сам еще не проверял):

TiXmlDocument *xml = new TiXmlDocument();
xml->Parse(str_xml);
if (xml->Error()) {
printf("Error!");
return;
}
for (TiXmlElement *pitem = xml->FirstChildElement();
pitem;
pitem = pitem->NextSiblingElement() ? pitem->NextSiblingElement() : pitem->FirstChildElement()) {
printf("%s = [", pitem->Value());
if (0 == strcmp(pitem->Value(), "ctext")) {
printf("bcolor = %s", pitem->Attribute("bcolor") ? pitem->Attribute("bcolor") : "ffffff");
}
if (0 == strcmp(pitem->Value(), "text")) {
printf("color = %s ", pitem->Attribute("color") ? pitem->Attribute("color") : "000000");
if (pitem->FirstChild()->Value()) {
printf("text = %s", pitem->FirstChild()->Value());
}
}
printf("]\n");
}

добавлено через 2 минуты
А LUA это и правда парсер LUA скрипта, на ps2dev есть библиотека, седня залью в SDK и выложу, в принципе, можешь не качать, я седня уже обновлю

Mortem 22.05.2007 15:28

А нельзя помимо полного SDK вести его версию и выкладывать ещё и аддон? А то по 50 метров качать каждый раз напряжно. (: У меня анлим, но мееедленный. ):
Хотя в этот раз всего 13 метров скачалось, так что подожду новую версию.

wSlava 22.05.2007 16:05

Аддон - это в принципе сама библиотека, только ее нужно с SVN-сервера pspdev выкачать, после инсталяции она себя разносит по подкаталогам SDK. В принципе, большинсто инсталируется просто (но из консоли :) ) , траблы у меня были с zlib,png и mikmod, а freetype к примеру, я так и не смог поставить, так как нужно эмулятор линукса под винду ставить, ваще жесть. Сейчас, в принципе уже в SDK все что нужно включил, следующие обновления - если уж только специфическое что нибудь будет нужно.

Mortem 22.05.2007 21:44

Вложений: 1
В принципе Lua же должно хватить, чтобы делать полноценные сложные проекты. Так что можно приостановить развитие самого SDK, и сосредоточится на IDE и играх.

У меня вот уже анимированный человечек по экрану бегает. С управлением почти определился:
Analog - перемещение курсора, нацеливание.
X, O, П, V - перемещение.
LShift - стрельба.
RShift - перезарядка, хотя скорее всего автоматом будет.
Текстуру человечка стыбрил из оригинального Кримсона. (:

wSlava 22.05.2007 22:52

Вложений: 1
очередной SDK. Вставил lua (подпапочка lua, там же примерчик есть в sample), ужал в 7z на удивление до 30 мегов по сравнению с rar ... http://ifolder.ru/2098910
Еще в аттачменте чуть поправил mgfaudio, сделал, чтоб WAV в отдельном потоке проигрывался

Mortem 22.05.2007 23:05

Т.е. теперь можно одновременно 2 вавчика проигрывать?

wSlava 22.05.2007 23:13

Не, количество одновременно проигрываемых WAV вот MikMod_SetNumVoices(-1, 10); - я 10 поставил, но можно до 64 аппаратных и 192 - программно микшируемых каналов, то есть всего 256 одновременно.
Я имел в виду, что раньше чтоб очередной сэмпл озвучить, я в MGF в Update
ставил вызов MikMod_Update(), а теперь я оформил в виде отдельного потока (sceKernelCreateThread) с циклом
int AudioChannelThread(int args, void *argp)
{
while (WAV_Inited)
{
MikMod_Update();
sceKernelDelayThread(1);
}
return (0);
}
это я сделал, так как при вызове через Update шли тормоза ...

Mortem 22.05.2007 23:56

Кстати, пока больше не изменяй MGFAUDIO - я хочу отформатировать под общий стандарт. В принципе могу отдельно выложить отформатированный код, либо дождись, когда всё выложу.

добавлено через 14 минут
Т.е. Update теперь не нужно вызывать? Или нужно для mp3?

добавлено через 20 минут
А, исправил ещё серьёзные косяки с анимацией спрайта. И у шрифтов починил форматирование по правому краю.

wSlava 23.05.2007 00:18

Для mp3 нужно. ОК, выложи, потом поправлю, нужно действительно автоматом Update делать

Mortem 23.05.2007 00:51

Вложений: 1
вот. RAR, переименованный в ZIP.

Mortem 24.05.2007 00:32

Написал пример по работе со звуком. mp3-файл проигрался нормально, а вот с WAV возникли проблемы. Из 4 файлов примера только 2 хоть что-то играют, да и то, совсем не то, что в семпле, просто нойз какой-то. Может там какой-то особый формат нужен? Битрейт? Моно? Может я чего пропустил?
Ссылка на пример с приложенными файлами:
http://elmortem.mirgames.ru/download/psp/mgf_ex7.rar

В принципе у меня всё готово (на сервак закачал), как только с WAV'чиками разберёмся - рилизну.

Mortem 24.05.2007 22:59

wSlava, у тебя ICQ есть?

wSlava 26.05.2007 01:33

формат нужен MONO WAVE без сжатия (еще называют RIFF), я конвертил в принципе все ок, еще wav брал с библиотеки звуков (их полно в инете). Сейчас с багом разбираюсь, когда одновременно и WAV и MP3 играют, почему то если MP3 играет, после воспроизведения WAV (даже нескольких подрят) переключение на другую MP3 приводит к подвисанию, проблему нашел, это когда MP3_INIT проходит, разбираюсь...

P.S. Аську в личку скинул

добавлено через 14 часов 34 минуты
Починил аудио ! Долбануться можно, оказывается, когда несколько потоков создается посредством sceKernelCreateThread, то экспериментально я установил что sceKernelDelayThread(int delay), то бишь пауза сколько то микросекунд рассинхронизирует потоки (то бишь все виснет напрочь), и в таком случае нужно юзать sceKernelDelayThreadCB(int delay) ! Ща еще поделаю, уже завтра с утра выложу :)

Mortem 26.05.2007 02:27

Не исповедимы пути PSP-инженеров! (:

добавлено через 1 минуту
Хы, вот как сетевую либу буду писать - вот я там тоже с потоками поимеюсь... (:

wSlava 26.05.2007 13:10

Вложений: 1
Выкладываю новую версию mgfaudio, отформатированный под mgf :)
Вот некоторые изменения:
1)Исправил баг в mp3player.c, связанный с потоками
2)Wav - при добавлении в плейлист загружаются в память и потом при указании имени проигрываются, так в разы быстрее

Небольшое описание :
Есть 3 подхода к использованию mgf_audio:
1) Можно просто проиграть любой файл:
MGFAUDIO *player=new MGFAUDIO();
player->PlayFile("super.mp3")

2) Можно с помощью Add добавить любые файлы (сейчас это MP3 и Wav) в плейлист, а затем с помощью Play(),Next(), Prev(),Pause(),Stop() ... проигрывать плейлист:

player->Add("super1.mp3")
player->Add("super2.wav")
player->Add("super3.mp3")
...
Play()
...
Next()

3) Можно сформировать плейлист

player->Add("super1.mp3")
player->Add("super2.wav")
player->Add("super3.mp3")

а затем используя Play(Index),Stop(Index) воспроизводить необходимый файл. Это очень полезно для звуковых эфектов, например я так использую:

enum{
SND_DROP=0,
SND_SCORE,
SND_GAMEOVER
};

snd=new MGFAUDIO(3);
snd->Add("SOUND/drop.wav");
snd->Add("SOUND/score.wav");
snd->Add("SOUND/gameover.wav");

а затем в нужном месте snd->Play(SND_SCORE), причем Wav файлы проигрываются независимо друг от друга, то есть микшируются, сейчас поставил до 20 одновременно, если snd->Play вызывает mp3, то текущий проигрыеваемый mp3 остановится и запустится выбранный, и это не
влияет на Wav.

Еще ввел признак окончания проигрывания StopType:
MGF_HAND_STOP - это когда вручную вызывается Stop()
MGF_END_PLAYLIST - когда заканчивается плейлист
MGF_END_PLAYFILE - (сейчас только для MP3) когда заканчивается проигрывание по PlayFile()

Для атоматического воспроизведения по плейлисту следующей мелодии
нужно поставить AutoNext=true, для обработки данного события
нужно вызывать Update() (временно, далее будет автоматически)

Для очищения плейлиста используется функция Clear() (не нужно при удалении объекта)

Mortem 27.05.2007 10:51

Можешь ещё добавить 3 функции?
PlayRandom, GetVolume, SetVolume

wSlava 27.05.2007 11:35

Цитата:

Сообщение от Mortem (Сообщение 439271)
Можешь ещё добавить 3 функции?
PlayRandom, GetVolume, SetVolume

ОК, точно полезно будет


Текущее время: 03:58. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.