uint8_t* audio_load(uint8_t* buf, const char *audio) { FILE* file = fopen(audio, "rb"); off_t size = 0; if (file != NULL) { fseek(file, 0, SEEK_END); size = ftell(file); buf = linearAlloc(size); fseek(file, 0, SEEK_SET); fread(buf, 1, size, file); if (ferror(file)) { return NULL; } fclose(file); } uint8_t channel = 0x8; uint32_t sample_rate = 44100; uint32_t flags = SOUND_FORMAT_16BIT | SOUND_ONE_SHOT; //channel++; //channel%=8; GSPGPU_FlushDataCache(buf, size); csndPlaySound(channel, flags, sample_rate, 1.0, 0.0, buf, buf, size); return buf; }
void pm_3ds_sound_start(int freq, int len) { bufferpos = 0; soundstate=1; pm_3ds_sound_callback(len*1.2); // Filling first frame with +25% of samples to avoid buffer get empty GSPGPU_FlushDataCache(NULL, stream, SOUND_BUFFER_SIZE); csndPlaySound(0x8, SOUND_REPEAT | SOUND_FORMAT_8BIT, freq, 1.0, 0.0, (u32*)stream, (u32*)stream, SOUND_BUFFER_SIZE); }
void playSFX (SFX_s* s) { if (!s || !s->data || !soundEnabled) return; channel++; channel %= 8; // soundPlaySample(s->data, s->format, s->size, 22050, 127, 64, false, 0); csndPlaySound(channel+8, s->format, 44100, 1.0, 0.0, (u32*)s->data, (u32*)s->data, s->size); }
static void _postAudioBuffer(struct GBAAVStream* stream, struct GBAAudio* audio) { UNUSED(stream); memset(audioLeft, 0, AUDIO_SAMPLES * sizeof(int16_t)); memset(audioRight, 0, AUDIO_SAMPLES * sizeof(int16_t)); #if RESAMPLE_LIBRARY == RESAMPLE_BLIP_BUF blip_read_samples(audio->left, audioLeft, AUDIO_SAMPLES, false); blip_read_samples(audio->right, audioRight, AUDIO_SAMPLES, false); #elif RESAMPLE_LIBRARY == RESAMPLE_NN GBAAudioCopy(audio, audioLeft, audioRight, AUDIO_SAMPLES); #endif GSPGPU_FlushDataCache(0, (void*) audioLeft, AUDIO_SAMPLES * sizeof(int16_t)); GSPGPU_FlushDataCache(0, (void*) audioRight, AUDIO_SAMPLES * sizeof(int16_t)); csndPlaySound(0x8, SOUND_ONE_SHOT | SOUND_FORMAT_16BIT, 0x8000, 1.0, -1.0, audioLeft, audioLeft, AUDIO_SAMPLES * sizeof(int16_t)); csndPlaySound(0x9, SOUND_ONE_SHOT | SOUND_FORMAT_16BIT, 0x8000, 1.0, 1.0, audioRight, audioRight, AUDIO_SAMPLES * sizeof(int16_t)); CSND_SetPlayState(0x8, 1); CSND_SetPlayState(0x9, 1); csndExecCmds(false); }
void audio_load(const char *audio) { FILE *file = fopen(audio, "rb"); fseek(file, 0, SEEK_END); off_t size = ftell(file); fseek(file, 0, SEEK_SET); buffer = linearAlloc(size); off_t bytesRead = fread(buffer, 1, size, file); fclose(file); csndPlaySound(8, SOUND_FORMAT_16BIT | SOUND_REPEAT, 48000, 1, 0, buffer, buffer, size); linearFree(buffer); }
int main() { // Initialize services srvInit(); aptInit(); hidInit(NULL); ptmInit(); gfxInitDefault(); // consoleInit(GFX_TOP, NULL); csndInit(); // fsInit(); // sdmcInit(); chdir("sdmc:/"); void *device = gfxCreateDevice(240, 320); gfxMakeCurrent(device); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 1.0, 0.0, -1.0, 1.0); glTranslatef(0.5f, 0.5f, 0.0f); glRotatef(90.0f, 0.0f, 0.0f, 1.0f); glTranslatef(-0.5f, -0.5f, 0.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glGenTextures(1, &play_button); glGenTextures(1, &pause_button); glGenTextures(1, &loop_button); glGenTextures(1, &loop_disable_button); glGenTextures(1, &power_icon); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); int x, y, n; u8* image_data = stbi_load_from_memory(play_3_png, play_3_png_size, &x, &y, &n, 4); glBindTexture(GL_TEXTURE_2D, play_button); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); stbi_image_free(image_data); image_data = stbi_load_from_memory(pause_2_png, pause_2_png_size, &x, &y, &n, 4); glBindTexture(GL_TEXTURE_2D, pause_button); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); stbi_image_free(image_data); image_data = stbi_load_from_memory(loop_png, loop_png_size, &x, &y, &n, 4); glBindTexture(GL_TEXTURE_2D, loop_button); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); stbi_image_free(image_data); image_data = stbi_load_from_memory(loop_disable_png, loop_disable_png_size, &x, &y, &n, 4); glBindTexture(GL_TEXTURE_2D, loop_disable_button); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); stbi_image_free(image_data); image_data = stbi_load_from_memory(power_png, power_png_size, &x, &y, &n, 4); glBindTexture(GL_TEXTURE_2D, power_icon); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data); stbi_image_free(image_data); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); void *top_device = gfxCreateDevice(240, 400); gfxMakeCurrent(top_device); initfont_goth(); initfont_anita(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 1.0, 0.0, -1.0, 1.0); glTranslatef(0.5f, 0.5f, 0.0f); glRotatef(90.0f, 0.0f, 0.0f, 1.0f); glTranslatef(-0.5f, -0.5f, 0.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); int frames = 0; int channel = 0x8; while (aptMainLoop()) { gspWaitForVBlank(); hidScanInput(); gfxMakeCurrent(top_device); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glScalef(1.0/400.0, 1.0/240.0, 1.0); state_man(); gfxFlush(gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL)); u8 plevel; u8 charge; PTMU_GetBatteryLevel(NULL, &plevel); PTMU_GetBatteryChargeState(NULL, &charge); if (plevel != power_level) { power_level = plevel; // draw_ui = true; } if (charge != is_charging) { is_charging = charge; //draw_ui = true; } gfxMakeCurrent(device); u8* fb = gfxGetFramebuffer(GFX_BOTTOM, GFX_LEFT, NULL, NULL); render(); gfxFlush(fb); // Your code goes here u32 kDown = hidKeysDown(); if (kDown & KEY_START) break; // break in order to return to hbmenu // Flush and swap framebuffers if (audiobuf && !paused) { if(frames >= 50) { frames = 0; int n = 0; if (decode_mode == AUDIO_MODE_VORBIS) { n = stb_vorbis_get_samples_short_interleaved(v, 2, audiobuf, Samples * 2); } else { while (audiobuf_index < Samples * 2) { n = FLAC__stream_decoder_process_single(FLAC_decoder); if (FLAC__stream_decoder_get_state(FLAC_decoder) == FLAC__STREAM_DECODER_END_OF_STREAM) break; } audiobuf_index = 0; } if(n == 0) { if (decode_mode == AUDIO_MODE_VORBIS) { stb_vorbis_close(v); } else { FLAC__stream_decoder_delete(FLAC_decoder); } linearFree(audiobuf); audiobuf = NULL; v = NULL; FLAC_decoder = NULL; if (loop_flag) play_file_from_filename(currently_playing); } GSPGPU_FlushDataCache(NULL, (u8*)audiobuf, audiobuf_size); if (channel == 0x8) channel = 0x6; if (channel == 0x6) channel = 0x8; csndPlaySound(SOUND_CHANNEL(channel), SOUND_ONE_SHOT | SOUND_LINEAR_INTERP | SOUND_FORMAT_16BIT, Samples * 2, 10.0, 0.0, (u32*)audiobuf, (u32*)audiobuf, audiobuf_size); } frames++; } gfxFlushBuffers(); gfxSwapBuffersGpu(); } // Exit services if (FLAC_decoder) { FLAC__stream_decoder_delete(FLAC_decoder); } csndExit(); gfxExit(); ptmExit(); hidExit(); aptExit(); srvExit(); return 0; }