#include <acknex.h>
#include <d3d9.h>
#define PRAGMA_PATH "%EXE_DIR%\\templates\\sounds"
/*
typedef struct DSBUFFERDESC {
DWORD dwSize;
DWORD dwFlags;
DWORD dwBufferBytes;
DWORD dwReserved;
LPWAVEFORMATEX lpwfxFormat;
GUID guid3DAlgorithm;
} DSBUFFERDESC;
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
*/
SOUND *snd = "shot4.wav";
//SOUND *snd = "tdestroyed.wav";
//SOUND *snd = "#1";
var step = 70;
void draw8bits(var posStart, short *bit, int length)
{
VECTOR vec;
vec_set(&vec, vector(posStart, 150, 0));
draw_line(&vec, NULL, 100);
draw_line(&vec, COLOR_WHITE, 100);
var posX = posStart;
var posY = 250;
int i = 0;
for(; i < length; i += 2, bit += 1)
{
vec.x += 1;
vec.y = 150.0 + (*bit - 32896.0) / 32896.0 * 100.0;
if(vec.x > 0)
draw_line(&vec, COLOR_WHITE, 100);
if(posX > 0)
draw_text(str_for_int(NULL, *bit), posX, posY, COLOR_WHITE);
posY += 8;
if(!(vec.x % step))
{
posY = 250;
posX += step;
if(posX > screen_size.x)
break;
}
}
draw_line(&vec, NULL, 100);
}
void draw16bits(var posStart, long *bit, int length)
{
VECTOR vec;
vec_set(&vec, vector(posStart, 150, 0));
draw_line(&vec, NULL, 100);
draw_line(&vec, COLOR_WHITE, 100);
var posX = posStart;
var posY = 250;
int i = 0;
for(; i < length; i += 4, bit += 1)
{
vec.x += 1;
vec.y = 150.0 + *bit / 2147483648.0 * 100.0;
if(vec.x > 0)
draw_line(&vec, COLOR_WHITE, 100);
if(posX > 0)
draw_text(str_for_int(NULL, *bit), posX, posY, COLOR_WHITE);
posY += 8;
if(!(vec.x % step))
{
posY = 250;
posX += step;
if(posX > screen_size.x)
break;
}
}
draw_line(&vec, NULL, 100);
}
void main()
{
video_mode = 10;
fps_max = 60;
wait(1);
draw_textmode("Courier New", 0, 12, 100);
var posStart = 1;
var keyL = 0;
var keyR = 0;
var timer = 0;
while(!key_esc)
{
DSBUFFERDESC *dsBufferDesc;
byte** pSampleBuffer;
snd_buffer(snd, &dsBufferDesc, &pSampleBuffer);
// sound data
draw_text(str_printf(NULL, "size: %d", dsBufferDesc->dwSize), 0, 0, COLOR_WHITE);
draw_text(str_printf(NULL, "buffer bytes: %d", dsBufferDesc->dwBufferBytes), 0, 10, COLOR_WHITE);
draw_text(str_printf(NULL, "channels: %d", dsBufferDesc->lpwfxFormat.nChannels), 200, 0, COLOR_WHITE);
draw_text(str_printf(NULL, "bytes sample: %d", dsBufferDesc->lpwfxFormat.wBitsPerSample), 200, 10, COLOR_WHITE);
draw_text(str_printf(NULL, "bytes sec: %d", dsBufferDesc->lpwfxFormat.nSamplesPerSec), 200, 20, COLOR_WHITE);
// move drawing
if(key_cul && !keyL)
{
timer = 0;
posStart -= step;
}
else if(key_cul)
{
timer += time_step;
if(timer > 2)
{
timer = 0;
posStart -= step;
}
}
keyL = key_cul;
if(key_cur && !keyR)
{
timer = 0;
posStart += step;
}
else if(key_cur)
{
timer += time_step;
if(timer > 2)
{
timer = 0;
posStart += step;
}
}
keyR = key_cur;
// draw
switch((int)dsBufferDesc->lpwfxFormat.wBitsPerSample)
{
case 8:
draw8bits(posStart, *pSampleBuffer, dsBufferDesc->dwBufferBytes);
break;
case 16:
draw16bits(posStart, *pSampleBuffer, dsBufferDesc->dwBufferBytes);
break;
default:
draw_text("Unknown format!", 0, 250, COLOR_WHITE);
}
wait(1);
}
sys_exit(NULL);
}