Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Arvostele pelit
15.8. klo 12 mennessä!

Keskustelu: Koodit näytille: C++: Kelloääni musiikki!!

Sivu 1 / 1

shadez [23.05.2003 21:56:06]

#

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;


 }

shadez [23.05.2003 21:57:20]

#

kiitti

shadez [23.05.2003 21:57:29]

#

ainii tää oliki mun tekemä

MakeGho [10.06.2003 20:29:42]

#

Tää on kyllä tosi hyödyllinen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta