static void event_handler(const ALLEGRO_EVENT * event) { int i; switch (event->type) { /* Was the X button on the window pressed? */ case ALLEGRO_EVENT_DISPLAY_CLOSE: exiting = true; break; /* Was a key pressed? */ case ALLEGRO_EVENT_KEY_CHAR: if (event->keyboard.keycode == ALLEGRO_KEY_LEFT) { double pos = al_get_audio_stream_position_secs(music_stream); pos -= 5.0; if (pos < 0.0) pos = 0.0; al_seek_audio_stream_secs(music_stream, pos); } else if (event->keyboard.keycode == ALLEGRO_KEY_RIGHT) { double pos = al_get_audio_stream_position_secs(music_stream); pos += 5.0; if (!al_seek_audio_stream_secs(music_stream, pos)) printf("seek error!\n"); } else if (event->keyboard.keycode == ALLEGRO_KEY_SPACE) { bool playing; playing = al_get_mixer_playing(al_get_default_mixer()); playing = !playing; al_set_mixer_playing(al_get_default_mixer(), playing); } else if (event->keyboard.keycode == ALLEGRO_KEY_ESCAPE) { exiting = true; } break; case ALLEGRO_EVENT_MOUSE_BUTTON_DOWN: mouse_button[event->mouse.button] = 1; maybe_fiddle_sliders(event->mouse.x, event->mouse.y); break; case ALLEGRO_EVENT_MOUSE_AXES: maybe_fiddle_sliders(event->mouse.x, event->mouse.y); break; case ALLEGRO_EVENT_MOUSE_BUTTON_UP: mouse_button[event->mouse.button] = 0; break; case ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY: for (i = 0; i < 16; i++) mouse_button[i] = 0; break; /* Is it time for the next timer tick? */ case ALLEGRO_EVENT_TIMER: logic(); render(); break; } }
static void render(void) { double pos = al_get_audio_stream_position_secs(music_stream); double length = al_get_audio_stream_length_secs(music_stream); double w = al_get_display_width(display) - 20; double loop_start_pos = w * (loop_start / length); double loop_end_pos = w * (loop_end / length); ALLEGRO_COLOR c = al_map_rgb(255, 255, 255); al_clear_to_color(al_map_rgb(64, 64, 128)); /* render "music player" */ al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA); al_draw_textf(basic_font, c, 0, 0, 0, "Playing %s", stream_filename); print_time(8, 24, pos); al_draw_textf(basic_font, c, 100, 24, 0, "/"); print_time(110, 24, length); al_draw_filled_rectangle(10.0, 48.0 + 7.0, 10.0 + w, 48.0 + 9.0, al_map_rgb(0, 0, 0)); al_draw_line(10.0 + loop_start_pos, 46.0, 10.0 + loop_start_pos, 66.0, al_map_rgb(0, 168, 128), 0); al_draw_line(10.0 + loop_end_pos, 46.0, 10.0 + loop_end_pos, 66.0, al_map_rgb(255, 0, 0), 0); al_draw_filled_rectangle(10.0 + slider_pos - 2.0, 48.0, 10.0 + slider_pos + 2.0, 64.0, al_map_rgb(224, 224, 224)); /* show help */ al_draw_textf(basic_font, c, 0, 96, 0, "Drag the slider to seek."); al_draw_textf(basic_font, c, 0, 120, 0, "Middle-click to set loop start."); al_draw_textf(basic_font, c, 0, 144, 0, "Right-click to set loop end."); al_draw_textf(basic_font, c, 0, 168, 0, "Left/right arrows to seek."); al_draw_textf(basic_font, c, 0, 192, 0, "Space to pause."); al_flip_display(); }
static void logic(void) { /* calculate the position of the slider */ double w = al_get_display_width(display) - 20; double pos = al_get_audio_stream_position_secs(music_stream); double len = al_get_audio_stream_length_secs(music_stream); slider_pos = w * (pos / len); }
static int allua_audio_stream_get_position_secs(lua_State * L) { ALLUA_audio_stream audio_stream = allua_check_audio_stream(L, 1); lua_pushnumber(L, al_get_audio_stream_position_secs(audio_stream)); return 1; }
void AudioStream::pause() { al_set_audio_stream_playing(m_stream, false); m_lastPause = al_get_audio_stream_position_secs(m_stream); }
int get_sound_seek(sound_t* sound) { return al_get_audio_stream_position_secs(sound->stream) * 1000; }