webForumDet fria alternativet

Toner och frekvens(DirectX)

.NET

11 svar · 492 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Hej.

Jag undrar om det finns någon som har koll på det här med toner och frekvensen:


case "C1":
Frekvens = "8000";
break;
case "C1#":
Frekvens = "8500";
break;
case "D1":
Frekvens = "9000";
break;
case "D1#":
Frekvens = "9500";
break;
case "E1":
Frekvens = "10000";
break;
case "F1":
Frekvens = "10700";
break;
case "F1#":
Frekvens = "11300";
break;
case "G1":
Frekvens = "12000";
break;
case "G1#":
Frekvens = "12800";
break;
case "A1":
Frekvens = "13400";
break;
case "A1#":
Frekvens = "14300";
break;
case "H1":
Frekvens = "15200";
break;
case "C2":
Frekvens = "16300";
break;
case "C2#":
Frekvens = "17300";
break;
case "D2":
Frekvens = "18000";
break;
case "D2#":
Frekvens = "19000";
break;
case "E2":
Frekvens = "20000";
break;

Jag skulle behöva komma ner i oktaven (oktaverna ser ni C /C1/C2), och jag skulle också behöva komma upp lite mera.

Någon som känner till detta??? :q

Medlem sedan juli 20023 617 inlägg
#2

Vad är det för frekvenser du angett i din kod?

Medlem sedan mars 20011 880 inlägg
#3

När jag sökte på DirectSound så hittade jag lite kod om hur man kan spela på olika frekvenser.

private void PlayNote(int freq)
{
if (null != applicationBuffer)
//applicationBuffer.Dispose();  //tar bort detta för att tonerna 
//skall klinga längre
applicationBuffer = null;
 
BufferDescription desc = new BufferDescription();
desc.ControlFrequency  = true;
desc.ControlPan = true;
desc.ControlVolume = true; 

try
{//här kan man ändra strFileName
strFileName = Application.StartupPath + "\\Ljud\\ding.wav";
//strFileName = @"E:\Music_Translater\Translater\bin\Debug\Ljud\Jag.wav";
applicationBuffer = new SecondaryBuffer(strFileName, desc, applicationDevice);
			
applicationBuffer.Frequency = freq;
if(checkBox2.Checked==true)
{
BufferPlayFlags PlayFlags  =  0;
applicationBuffer.Play(0, PlayFlags);			
}
}
catch(Exception fel)
{
//MessageBox.Show(fel.Message, "PlayNote");	
//DefaultPlayUI();
} 
}

Så om du tittar på min andra kod-snutt, så omvandlar jag tonerna till frekvens.

Detta fungerar kanonbra, men jag skulle behöva utöka skalan, därav min fråga. :i

Medlem sedan juli 20023 617 inlägg
#4

Ok! :) Jag tyckte frekvenserna såg så höga ut bara, men om det är tonerna angett i Hz du är ute efter så är det som följer.

a1 (ettstrukna a) = 440Hz är en bra utgångspunkt.
För att få frekvensen för nästa halvton multiplicerar du med 12:e roten ur 2, alternativt dividerar om du ska nedåt.

a1 = 440
a#1 = 466
b1 = 494
c1 = 523

osv...

Medlem sedan maj 20018 027 inlägg
#5

Om jag inte har fått tonskalorna helt om bakfoten, ska en oktavs höjning motsvara en fördubbling av frekvensen. Därför ser det konstigt ut att C1 är på 8000 Hz, medan C2 är på 16300 Hz. Borde inte C2 vara exakt 16000 Hz, alternativt C1=8150 Hz?

Medlem sedan mars 20011 880 inlägg
#6

Hej fiddler!
Tack för dit svar. Jag skulle vara ännu lyckligare om jag hadde förståt hur du menar, jag har aldrig räknat med roten.
<multiplicerar du med 12:e roten ur 2

Tror du att du på ett enkelt sätt kan ställ upp det där, så att jag förstår hur du menar?

Medlem sedan juli 20023 617 inlägg
#7

UlfT: Du har helt rätt. Jag är mycket tveksam till frekvenserna i koden dock. Om värdena motsvarar svängningar per sekund så håller vi konsert för grannskapets hundar snarare än oss själva... :(

saw: Talet du ska använda är cirka 1.059463094. Som UlfT säger ovan räcker det med att räkna ut en oktav och sedan dubbla eller halvera. Jag ser fram emot att få höra hur det går. :)

Medlem sedan mars 20011 880 inlägg
#8

Jag vill bara kolla mig själv, är det här rätt:

c3# 1976
d3 2093
d#3 2217
e3 2349
f3 2489
f3# 2637
g3 2794
g3# 2960
a3 3136
a3# 3322
h3 3520
c4# 3729
d4 3951
d#4 4186
e4 4435
f4 4699
f4# 4978
g4 5274
g4# 5588
a4 5920
a4# 6272
h4 6645
c5# 7040

Medlem sedan juli 20023 617 inlägg
#9

Du hoppar över c... :(
Listan borde bli:

a3 = 1760Hz (exakt)
a#3 = 1864
h3 = 1975
c3 = 2093
c#3 = 2217
d3 = 2349
d#3 = 2489
e3 = 2637
f3 = 2793

osv...

Medlem sedan mars 20011 880 inlägg
#10

Tusen tack för hjälpen och tålamodet.
Jag tror att jag har fattat. Gjorde en excell uträkning, blev bra.
Jag rundade av decimalerna, tror att det blir bra i alla fall.

Medlem sedan juli 20023 617 inlägg
#11

Vad bra! :)

Medlem sedan mars 20011 880 inlägg
#12

fiddler

Än en gång kanon tack. Jag har gjort den delen färdig nu, och jag har svårt att förstå hur jag skall kunna få det bättre.

Tack vare dig och dina förslag så känner jag mig väldigt nöjd.
Ha en bra dag.

MVH
saw

265 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)