Урок 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() позволяет звуку проигрываться через динамики.

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