Con_Printf("%5d samplepos\n", shm->samplepos);
Con_Printf("%5d samplebits\n", shm->format.width * 8);
Con_Printf("%5d speed\n", shm->format.speed);
- Con_Printf("0x%x dma buffer\n", shm->buffer);
+ Con_Printf("%p dma buffer\n", shm->buffer);
Con_Printf("%5u total_channels\n", total_channels);
}
}
}
- return (channels - target_chan);
+ return (target_chan - channels);
}
-void S_StopSound(int entnum, int entchannel)
+void S_StopChannel (unsigned int channel_ind)
{
- int i;
+ channel_t *ch;
+
+ if (channel_ind >= total_channels)
+ return;
- for (i=0 ; i<MAX_DYNAMIC_CHANNELS ; i++)
+ ch = &channels[channel_ind];
+ if (ch->sfx != NULL)
{
- if (channels[i].entnum == entnum
- && channels[i].entchannel == entchannel)
+ if (ch->sfx->fetcher != NULL)
{
- channels[i].end = 0;
- channels[i].sfx = NULL;
- return;
+ snd_fetcher_end_t fetcher_end = ch->sfx->fetcher->end;
+ if (fetcher_end != NULL)
+ fetcher_end (ch);
}
+ ch->sfx = NULL;
}
+ ch->end = 0;
+}
+
+void S_PauseChannel (unsigned int channel_ind, qboolean toggle)
+{
+ if (toggle)
+ channels[channel_ind].flags |= CHANNELFLAG_PAUSED;
+ else
+ channels[channel_ind].flags &= ~CHANNELFLAG_PAUSED;
+}
+
+void S_LoopChannel (unsigned int channel_ind, qboolean toggle)
+{
+ if (toggle)
+ channels[channel_ind].flags |= CHANNELFLAG_FORCELOOP;
+ else
+ channels[channel_ind].flags &= ~CHANNELFLAG_FORCELOOP;
+}
+
+void S_StopSound(int entnum, int entchannel)
+{
+ unsigned int i;
+
+ for (i = 0; i < MAX_DYNAMIC_CHANNELS; i++)
+ if (channels[i].entnum == entnum && channels[i].entchannel == entchannel)
+ {
+ S_StopChannel (i);
+ return;
+ }
}
void S_StopAllSounds(qboolean clear)
{
+ unsigned int i;
+
+ for (i = 0; i < total_channels; i++)
+ S_StopChannel (i);
+
total_channels = MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS; // no statics
memset(channels, 0, MAX_CHANNELS * sizeof(channel_t));
}
}
+void S_SetChannelVolume (unsigned int ch_ind, float fvol)
+{
+ channels[ch_ind].master_vol = fvol * 255;
+}
+
+
void S_ClearBuffer(void)
{
int clear;
{
size = sfx->mempool->totalsize;
total += size;
- Con_Printf("%c(%2db) %7i : %s\n", sfx->loopstart >= 0 ? 'L' : ' ', sfx->format.width * 8, size, sfx->name);
+ Con_Printf ("%c%c(%2db, %6s) %8i : %s\n",
+ (sfx->loopstart >= 0) ? 'L' : ' ',
+ (sfx->flags & SFXFLAG_STREAMED) ? 'S' : ' ',
+ sfx->format.width * 8,
+ (sfx->format.channels == 2) ? "stereo" : "mono",
+ size,
+ sfx->name);
}
}
Con_Printf("Total resident: %i\n", total);