Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_pod_PSP_na_C__RUS.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.73 Mб
Скачать

Урок 6: Добавление звука в программу, глава 2

На этой странице представлена вторая часть урока, написанная автором Стивеном Мерити (ака Smerity). Если вы попали на данную страницу, не прочитав первую часть, то вернитесь и начните сначала. И теперь переходим к тому, что я люблю называть «зоной сумерков». Я называю так потому, что я не имею понятия, каким образом это работает и почему, но я намерен узнать об этом когда-нибудь. В любом случае эти функции необходимы для вашего кода:

// TWILIGHT ZONE! <do doo do doo> /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) {           sceKernelExitGame();           return 0; }

/* Callback thread */ int CallbackThread(SceSize args, void *argp) {           int cbid;

          cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);           sceKernelRegisterExitCallback(cbid);

          sceKernelSleepThreadCB();

          return 0; }

/* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) {           int thid = 0;

          thid = sceKernelCreateThread("update_thread", CallbackThread, 0×11, 0xFA0, 0, 0);           if(thid >= 0) {                     sceKernelStartThread(thid, 0, 0);           }

          return thid; } // END OF TWILIGHT ZONE! <do doo do do>

Теперь основная часть вашего кода. Первым делом мы установим максимальную тактовую частоту PSP. Пожалуйста, обратите внимание, что мы не повредим нашу PSP, ведь мы только добавляем недостающей скорости консоли от Sony. Причина состояла во времени работы батареи (для получения дополнительной информации, см. урок 5). Другим знакомым дополнением является функция «pspAudioInit()«. Она схожа с функцией «pspDebugScreenInit ()«, которую мы всегда вызывали. В основном она устанавливает динамики и все необходимое для управления звуковым выходом. Итак:

int main() {           scePowerSetClockFrequency(333, 333, 166);

          pspDebugScreenInit();           SetupCallbacks();

          pspAudioInit();           SceCtrlData pad;           int i;

Теперь новая часть кода:

          MP3_Init(1);           MP3_Load("test.mp3");           MP3_Play();

MP3_Init() инициализирует структуры с помощью libmad и определяет, какой канал PSP будет проигрывать аудио-файлы (в данном случае, канал 1). Дадим некоторые пояснения относительно MP3_Load(): он загружает ваш MP3-файл (не забудьте предварительно заменить «test.mp3″ на имя вашего MP3-файла, или замените название вашего MP3-файла на «test.mp3″). MP3_Play() позволяет звуку проигрываться через динамики.

А теперь сделайте глубокий вдох, сделайте небольшую передышку и переходите к третьей части, в которой мы продолжим создавать нашу программу.

Урок 6: Добавление звука в программу, глава 3

Это третья, заключительная, часть урока, написанного Стивеном Мерити (ака Smerity). Если вы попали на данную страницу, не прочитав первую и вторую части, то вернитесь и начните сначала. В этом разделе мы расскажем о некоторых опциях, а также о механизме функционирования простого интерфейса пользователя. Итак:

        while(1) {                     sceCtrlReadBufferPositive(&pad, 1);                     if(pad.Buttons & PSP_CTRL_CROSS) {                               break;                     } else if(pad.Buttons & PSP_CTRL_CIRCLE) {                               MP3_Pause();                               for(i=0; i<10; i++) {                                         sceDisplayWaitVblankStart();                               }                     }

                    if (MP3_EndOfStream() == 1) {                               MP3_Stop();                     }           }

Поговорим о кнопках, которые мы затронули в уроке 3. Если нажать кнопку [X], то мы выйдем из цикла (и фактически, из самой программы). Если пользователь нажмет [O], то проигрывание музыки приостановится благодаря функции MP3_Stop (). В заключении проверим функцию MP3_EndOfStream() для того, чтобы посмотреть, закончилось ли проигрывание MP3-файла. Функция возвратит «1» в случае окончании музыки и «0» в случае проигрывания. Если музыка завершилась, то мы останавливаем воспроизведение, чтобы сохранить заряд батареи.

Затем введем некоторый код wrapup после выхода пользователя из цикла:

          MP3_Stop();           MP3_FreeTune();

          sceKernelSleepThread();

          return 0; }

Для завершения нашей программы сначала остановим аудио-файл и после этого освободим ту часть памяти музыкального файла, которую мы использовали. Освобождение памяти довольно существенно для этой программы (когда программа завершается, в любом случае память освобождается), что также немаловажно для других «доморощенных» программ. Если вы не освободите память, то после завершения MP3-файла не будут доступны другие функции.

Именно для вашего файла С. Просто, правда? Теперь мы двигаемся дальше, к созданию важного Makefile\’а. Помните, что Makefile не имеет никакого разрешения (ни .exe, .doc, .txt, .tar, и т.д.). Главным изменением является добавление новых библиотек. «lmad» – для включения libmad и для декодирования Mp3. «pspaudiolib» и «pspaudio» открываю доступ к аудио-средствам PSP (например, к динамикам).

TARGET = mp3 OBJS = mp3player.o main.o CFLAGS = -O2 -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR =

LIBS = -lmad -lpspaudiolib -lpspaudio -lpsppower LDFLAGS = EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = MP3 Player Example PSPSDK=$(shell psp-config —pspsdk-path) include $(PSPSDK)/lib/build.mak

Теперь все это необходимо включить в Cygwin, затем найти нашу папку проекта и ввести волшебное слово «make» (или для встроенного микропрограммного обеспечения Версии 1.50 — » make kxploit » с целью создания двух папок).

Вы должны будете скопировать ваш «test.mp3» в папку, где будет находиться ваша программа для PSP. Для того чтобы загрузить данный файл во время работы программы. В встроенном микропрограммном обеспечении версии 1.50 он находится в папке (без «%» в конце). Убедитесь, что скорость передачи вашего MP3 меньше чем или равна 160 кбит/с. Иначе возникнет ошибка «recoverable frame level error (lost synchronization)«. Если ваш звуковой файл все еще играет, то ни о чем не волнуйтесь. Сейчас вы можете просто запустить приложение и наслаждаться вашей музыкой!

Не забудьте подписаться на RSS нашего сайта (или хотя бы занести сайт в закладки в браузере), чтобы быть в курсе и не пропустить обновления нашего курса.

Если вам понравились эти уроки и у вас есть лишняя пара баксов, вы можете отблагодарить автора или соавторов курса Или, если у вас есть свой веб-сайт, разместите ссылку на этот урок.