Avatar billede dkscripts Nybegynder
03. marts 2004 - 19:33 Der er 7 kommentarer og
1 løsning

musik - ringetone decoder

Jeg ønsker at lave en funktion der kan decode alm. ringetoner som du bruger på fhv. gamle mobiltelefoner. Meledien der f.eks. skulle decodes kunne se sådan ud:

Hastighed: 140
8d2 8#f1 8b1 8d2 8e2 8a1 8#c2 4d2 8b1 8d2 8#f2


Hvordan kan jeg lave en funktion der kan decode dette til frekvenser og længder? Så jeg kan afspille dem i c++ ved hjælp af funktionerne: sound(x); delay(x); nosound(x);

tusind tak
Avatar billede soreno Praktikant
03. marts 2004 - 20:15 #1
Første skridt på vejen vil være at finde ud af hvad koderne betyder.

Så, hvad betyder de ?
Avatar billede dkscripts Nybegynder
03. marts 2004 - 20:36 #2
det er jo netop det jeg er på vildmarken omkring... det er jo noget med oktaver og noder.. men ikke lige mit område :-S
Avatar billede dkscripts Nybegynder
03. marts 2004 - 20:42 #3
prøv at se her... måske det kan hjælpe lid tpå vej:
http://www.diku.dk/hjemmesider/studerende/hallwyl/syntetisering/
Avatar billede soreno Praktikant
03. marts 2004 - 20:54 #4
Det kan det ikke.

Men et skud i tågen ville være:
Hastighed = BPM

8d2 = 8. dels node, tone d i oktav 2
8#c2 = 8. dels node, tone c# i oktav 2

Der er sikkert også en kode til at lave pause med (ingen tone).

Hvis der er 140 BPM, så tager ét beat 60 / 140 ~ 0.429 sek.

Frekvenserne for tonerne kan beregnes ud fra en grundtone (typisk 440 Hz som er kammertonen og et a).
Den nemme løsning er at finde frekvenserne her:
http://courses.ece.uiuc.edu/ece291/books/labmanual/io-devices-speaker.html
Avatar billede dkscripts Nybegynder
04. marts 2004 - 15:42 #5
tjaaa du har måske ret... men prøv at vise hvordan du vil omsætte 8#c2 og 8d2 til en frekvense...
Avatar billede soreno Praktikant
04. marts 2004 - 18:18 #6
C#      554.37

En 1/8 node må tage 1/8 del af et beat.

Derfor skal tonen C# spilles i 0.429/8 sek.
Avatar billede dkscripts Nybegynder
09. marts 2004 - 19:46 #7
tror du har næsten ret... men hvad skal tiden være mellem hver tone ? hvis du kan komme med et gæt på det og skrive et svar så har du points.. /tak
Avatar billede soreno Praktikant
10. marts 2004 - 06:26 #8
Hvis der står "8d2 8#f1" så er der ingen delay mellem tonerne.

Som ovenfor nævnt, tror jeg der er en kode til at lave pause med.

Kodeskitse:
Del strengen (med toner) op i tokens. Dvs. split strengen på mellemrum.

For hver token:
  playTone(substring);  //(F.eks. playTone(8d2);)

Lav en playTone metode som tager ovenstående input og splitter op i "hastighed, tone, oktav" og kald en traditionel playSound(hz, tid) eller hvordan det nu fungerer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester