Funckaj beep -prosty programik

0

Witam,
mam zamiar napisać prosty programik, który będzie wykorzystywał funkcje Beep z biblioteki windows.h. Ale użytkownik będzie wybierał dźwięki tylko z paru gotowych(o określonej już częstotliwości i czasie) dzwięków + funckaj sleep, ktorej czas bedzie mogl sam wpisac. Nie prosze was o gotowy kod, tylko czy mógłby mi ktos podsunąć pomysł jak to napisac? Np. nie wiem jak mam zrobić aby uzytkownik mógł wybrac dowolna ilosc dzwięków + sleep, które potem zostaną odtworzone po kolei.

0

Nie do końca rozumiem... Ma to wyglądać mniej-więcej tak:? (dialog z komputerem)

Podaj ilość dzwiekow
4
Podawaj kolejne dzwieki
12000
2000
5000
4000
Podawaj numer dzwieku do odtworzenia, 0 == koniec.
3
beep 5000
2
beep 2000
0

?

0

Nutki były by takie;

Beep( 261.6 , 1000); // C
Beep( 293.7 , 1000); // D
Beep( 329.6 , 1000); // E
Beep( 349.2 , 1000); // F
Beep( 391.9 , 1000); // G
Beep( 440.0 , 1000); // A
Beep( 493.9 , 1000); // H
Beep( 523.2 , 1000); // C

do tego doszła by jeszcze funkcja Sleep(); zeby można było robic jakies przerwy między nutami. Program miałby wyglądac mniej więcej tak :
Podaj nuty : //tutaj użytkownik wypisuje sobie np CCDEFFGDF itd gdy już skończy wypisywać wszystkie nuty, program je ładnie po kolei zagra. Ja mam natomiast taki problem, że nie wiem jak przypisac cała tą funkcje Beep( 261.6 , 1000); pod zmienną C, gdy np robie tak : c=Beep( 261.6 , 1000); to nie działa. Chciałbym tylko żeby mi ktoś powiedział czego tutaj użyć aby zadziałało, reszte chciałbym już zrobic sam ;)

0

To bardzo proste: nie da się tego tak przypisać bo funkcje w C++ nie są obiektami pierwszej klasy. Najprosciej będzie to zrobić tak żeby zrobić tablicę odwzorowującą literkę np. C na tą częstotliwość 261.6
Potem zrobisz tylko

char nutka;
cin>>nutka;
Beep(nutki[nutka],1000);
0

Oczywiście tak nie należy robić, ale C++0x pozwoli na takie abominacje:

function<void()> C = []{ Beep(261.6,1000); };
C();

albo nawet

#include <functional>
#include <vector>
#include <windows.h>
using namespace std;

vector<float> nuty={261.6, 293.7, 329.6, 349.2, 391.9, 440.0, 493.9, 523.2};
vector<function<void()>> beeps;

auto main()->int
{
    for (auto i=nuty.begin();i!=nuty.end();++i)
    {
        float f=*i;
        beeps.push_back([f](){Beep(f,1000);});
    }

    beeps[1]();
    beeps[5]();
    beeps[3]();
    beeps[4]();
}
0

Beep może ci nie działać, jeśli nie masz win7
Poza tym nie licz nawet, że dźwięk wygenerowany Beep będzie trochę przypominał jakiś dźwięk instrumentu, nie mówiąc już o lekkich "puknięciach" w głośnikach między wywołaniami Beep

0
nobody napisał(a)

Beep może ci nie działać, jeśli nie masz win7

Albo windows xp 32 bit.

0

Beep działa w 32-bitowych systemach - z Win 7 włącznie. Nie zadziała w 64-bitowych. Bo tak zdecydowano :-|

0

@Azarien - jak to nie zadziała, skoro mi działa na win7 64 bit? (fakt że jako proces 32 bit, ale zawsze)

0

Wg. msdn Beep na Win7 64bit powinien działać, za to nie działa na xp i vista 64bit

Eventually because of the lack of hardware to communicate with, support for Beep was dropped in Windows Vista and Windows XP 64-Bit Edition.

In Windows 7, Beep was rewritten to pass the beep to the default sound device for the session. This is normally the sound card, except when run under Terminal Services, in which case the beep is rendered on the client.

1 użytkowników online, w tym zalogowanych: 0, gości: 1