Ihmisellä on kuusi aistia: tunto, näkö, maku ja haju. Taiteen avulla pyritään tyydyttämään kutakin aistia. Tämä koodiesimerkki opettaa, kuinka saat kirkonkello-ääntä, joka ensin muodostetaan äänikortissa ja sitten se tulee ulos kaiuttimistasi, mikäli sinulla on semmoiset / mikäli ne ovat päällä.
Varoitus! Makuasioista ei voi kiistellä, joten jos et tykkää minun biisistä, tee omasi!
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <math.h>
int debugbiisinpituus=12000; // 6000ms, sitten ohjelma loppuu;
// 15000 ==15s
// ok, eli eka num meinaa soundin pituutta (44100 on yks sekunti eli toi on soundin värähtelytaajuus)
// toinen, desimaaliluku on sitten äänen arvo (kokeile kaikkea, eka vaikka välillä 0.05f-0.2f
/* float music[] = {
20000,0.105f,
20000,0.115f,
20000,0.125f,
20000,0.135f,
20000,0.145f,
20000,0.155f,
}; */
unsigned short music[]=
{
20000,100,
20000,200,
10000,10,
10000,5,
20000,0,
20000,100,
20000,200,
10000,10,
10000,20,
20000,100,
};
void writeAudioBlock(HWAVEOUT hWaveOut, short int *block, DWORD size)
{
WAVEHDR header;
ZeroMemory(&header, sizeof(WAVEHDR));
header.dwBufferLength = size;
header.lpData = (LPSTR)block;
waveOutPrepareHeader(hWaveOut, &header, sizeof(WAVEHDR));
waveOutWrite(hWaveOut, &header, sizeof(WAVEHDR));
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
HWAVEOUT hWaveOut;
WAVEFORMATEX wfx;
wfx.nSamplesPerSec = 44100;
wfx.wBitsPerSample = 16;
wfx.nChannels = 1;
wfx.cbSize = 0;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
if(waveOutOpen(
&hWaveOut,
WAVE_MAPPER,
&wfx,
0,
0,
CALLBACK_NULL
) != MMSYSERR_NOERROR) {
fprintf(stderr, "häa");
exit(1);
}
int len=1188200;
short int *jot=new short int[len];
static bool dir=false;
int l=1;
int kohta=0;
int kaka=0;
float rad, ra,raba,wp;
for(int i=0;i<len;i++)
{
if( kaka >= music[kohta]*4 )
{
kaka=0;
kohta+=2;
if(kohta>64) kohta=0;
}
raba=sinf(kaka/100.0f);
rad=cosf(kaka/50000.0f);
float fade=((float(music[kohta]*5)-(float)kaka))/float(music[kohta]*4);
// ra=cosf(kaka*music[kohta+1]);
ra=cosf(kaka*float(music[kohta+1])*0.001f);
wp=cosf(i/10000.0f)*31000;
jot[i]=(ra*rad*raba+wp*ra)*sinf(kaka*0.04f);
++kaka;
}
writeAudioBlock(hWaveOut,jot,len);
Sleep(debugbiisinpituus);
waveOutClose(hWaveOut);
return 0;
}kiitti
ainii tää oliki mun tekemä
Tää on kyllä tosi hyödyllinen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.