/* ---------------------------------------------------------------------------- * Play the sample. * max_override_pos: Override the currently playing sound * only if it's already in this position, or beyond. * This is in seconds. 0 means always override. -1 means never override. * loop: Loop the sound? * gain: Volume, 0 - 1. * pan: Panning, 0 - 1 (0.5 is centered). * speed: Playing speed. */ void sample_struct::play( const float max_override_pos, const bool loop, const float gain, const float pan, const float speed ) { if(!sample || !instance) return; if(max_override_pos != 0 && al_get_sample_instance_playing(instance)) { float secs = al_get_sample_instance_position(instance) / (float) 44100; if( (secs < max_override_pos && max_override_pos > 0) || max_override_pos == -1 ) { return; } } al_set_sample_instance_playmode( instance, (loop ? ALLEGRO_PLAYMODE_LOOP : ALLEGRO_PLAYMODE_ONCE) ); al_set_sample_instance_gain(instance, gain); al_set_sample_instance_pan(instance, pan); al_set_sample_instance_speed(instance, speed); al_set_sample_instance_position(instance, 0); al_set_sample_instance_playing( instance, true); }
void AllegroSoundSample5::SetPan( float value ) { if ( !m_pInstance ) return; al_set_sample_instance_pan( m_pInstance, value ); }
static int allua_sample_instance_set_pan(lua_State * L) { ALLUA_sample_instance si = allua_check_sample_instance(L, 1); float val = luaL_checknumber(L, 2); lua_pushboolean(L, al_set_sample_instance_pan(si, val)); return 1; }
/* the main music player function */ static void music_player() { int i, note; for (i=0; i<NUM_PARTS; i++) { if (part_time[i] <= 0) { note = part_pos[i][0]; part_time[i] = part_pos[i][1]; al_stop_sample_instance(part_voice[i]); if (i == 3) { if (note == 1) { al_set_sample(part_voice[i], bd); al_set_sample_instance_pan(part_voice[i], PAN(128)); } else if (note == 2) { al_set_sample(part_voice[i], snare); al_set_sample_instance_pan(part_voice[i], PAN(160)); } else { al_set_sample(part_voice[i], hihat); al_set_sample_instance_pan(part_voice[i], PAN(96)); } al_play_sample_instance(part_voice[i]); } else { if (note > 0) { al_set_sample_instance_speed(part_voice[i], freq_table[note]/22050.0); al_play_sample_instance(part_voice[i]); } } part_pos[i] += 2; if (!part_pos[i][1]) part_pos[i] = part_ptr[i]; } part_time[i]--; } }
static void t3f_play_queued_sample(void) { int i; if(t3f_sample_queue[0]) { t3f_queue_sample_instance = al_create_sample_instance(t3f_sample_queue[0]); al_set_sample_instance_gain(t3f_queue_sample_instance, t3f_sound_volume); al_set_sample_instance_speed(t3f_queue_sample_instance, 1.0); al_set_sample_instance_pan(t3f_queue_sample_instance, 0.0); al_play_sample_instance(t3f_queue_sample_instance); for(i = 0; i < t3f_queued_samples - 1; i++) { t3f_sample_queue[i] = t3f_sample_queue[i + 1]; } t3f_sample_queue[i] = NULL; t3f_queued_samples--; } }
static bool do_play_sample(ALLEGRO_SAMPLE_INSTANCE *splinst, ALLEGRO_SAMPLE *spl, float gain, float pan, float speed, ALLEGRO_PLAYMODE loop) { if (!al_set_sample(splinst, spl)) { ALLEGRO_ERROR("al_set_sample failed\n"); return false; } if (!al_set_sample_instance_gain(splinst, gain) || !al_set_sample_instance_pan(splinst, pan) || !al_set_sample_instance_speed(splinst, speed) || !al_set_sample_instance_playmode(splinst, loop)) { return false; } if (!al_play_sample_instance(splinst)) { ALLEGRO_ERROR("al_play_sample_instance failed\n"); return false; } return true; }
/* this code is sick */ static void init_music() { float vol, val; char *p; int i; if (!al_is_audio_installed()) return; /* sine waves (one straight and one with oscillator sync) for the bass */ sine = create_sample_u8(22050, 64); p = (char *)al_get_sample_data(sine); for (i=0; i<64; i++) { *p = 128 + (sin((float)i * M_PI / 32.0) + sin((float)i * M_PI / 12.0)) * 8.0; p++; } /* square wave for melody #1 */ square = create_sample_u8(22050, 64); p = (char *)al_get_sample_data(square); for (i=0; i<64; i++) { *p = (i < 32) ? 120 : 136; p++; } /* saw wave for melody #2 */ saw = create_sample_u8(22050, 64); p = (char *)al_get_sample_data(saw); for (i=0; i<64; i++) { *p = 120 + (i*4 & 255) / 16; p++; } /* bass drum */ bd = create_sample_u8(22050, 1024); p = (char *)al_get_sample_data(bd); for (i=0; i<1024; i++) { vol = (float)(1024-i) / 16.0; *p = 128 + (sin((float)i / 48.0) + sin((float)i / 32.0)) * vol; p++; } /* snare drum */ snare = create_sample_u8(22050, 3072); p = (char *)al_get_sample_data(snare); val = 0; for (i=0; i<3072; i++) { vol = (float)(3072-i) / 24.0; val = (val * 0.9) + (RAND * 0.1); *p = 128 + val * vol; p++; } /* hihat */ hihat = create_sample_u8(22050, 1024); p = (char *)al_get_sample_data(hihat); for (i=0; i<1024; i++) { vol = (float)(1024-i) / 192.0; *p = 128 + (sin((float)i / 4.2) + RAND) * vol; p++; } /* start up the player */ for (i=0; i<256; i++) freq_table[i] = (int)(350.0 * pow(2.0, (float)i/12.0)); for (i=0; i<NUM_PARTS; i++) { part_pos[i] = part_ptr[i]; part_time[i] = 0; } part_voice[0] = al_create_sample_instance(sine); part_voice[1] = al_create_sample_instance(square); part_voice[2] = al_create_sample_instance(saw); part_voice[3] = al_create_sample_instance(bd); al_attach_sample_instance_to_mixer(part_voice[0], al_get_default_mixer()); al_attach_sample_instance_to_mixer(part_voice[1], al_get_default_mixer()); al_attach_sample_instance_to_mixer(part_voice[2], al_get_default_mixer()); al_attach_sample_instance_to_mixer(part_voice[3], al_get_default_mixer()); al_set_sample_instance_playmode(part_voice[0], ALLEGRO_PLAYMODE_LOOP); al_set_sample_instance_playmode(part_voice[1], ALLEGRO_PLAYMODE_LOOP); al_set_sample_instance_playmode(part_voice[2], ALLEGRO_PLAYMODE_LOOP); al_set_sample_instance_playmode(part_voice[3], ALLEGRO_PLAYMODE_ONCE); al_set_sample_instance_gain(part_voice[0], 192/255.0); al_set_sample_instance_gain(part_voice[1], 192/255.0); al_set_sample_instance_gain(part_voice[2], 192/255.0); al_set_sample_instance_gain(part_voice[3], 255/255.0); al_set_sample_instance_pan(part_voice[0], PAN(128)); al_set_sample_instance_pan(part_voice[1], PAN(224)); al_set_sample_instance_pan(part_voice[2], PAN(32)); al_set_sample_instance_pan(part_voice[3], PAN(128)); music_timer = al_install_timer(ALLEGRO_BPS_TO_SECS(22)); }