Optage lyd og converte til Beep's

Tags:    c++

<< < 123 > >>
Hey.

Jeg har fået en sær spøjs ide (det gør jeg tit).
Jeg har overvejet at konvertere normalt lyd (f.eks. optaget via mic eller andet på computeren) til pc'ens Buzzer.

Ved godt det lyder lidt absurt men det kunne være ganske morsomt.

Jeg har kigget lidt rundt omkring og har bland andet fundet denne artikkel: http://home20.inet.tele.dk/midgaard/snip/recplay.html
Men denne funktion optager i en form for binær buffer som jeg ikke lige kan se hvordan jeg kan knovertere til at bruge i Beep funktionen.

Beep funktionen i c++ windows lib bruges nemlig: Beep(frekvens, tid);

Nogen der har en ide til hvordan dette kan gøres?

//Darki



Indlæg senest redigeret d. 09.04.2008 20:38 af Bruger #3861
21 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Du skal finde frekvens (og amplituden) på det det du har optaget, der gør man med en FFT (eller DFT) funktion, søg på nettet.

Men vær opmærksom på at det meste lyd indeholder mere end 1 frekvens.



Du skal finde frekvens (og amplituden) på det det du har optaget, der gør man med en FFT (eller DFT) funktion, søg på nettet.

Men vær opmærksom på at det meste lyd indeholder mere end 1 frekvens.


Ja okay vil jeg prøve.

Ja men tænkte sådan på at tag et "øjebliks" billede af lyd frekvensen eller amplitude og så vente f.eks. 10 ms igen og så gøre det. Det vil nok gi halvdårlig lyd men det jo os ok hehe.

Men vil kigge lidt på det.



10 ms er i underkanten.
Men selv inden for et lille interval er der mange toner samtidig.
Forskellen på lyden fra forskellige instrumenter der spiller samme tone er (bl.a.) sammensætningen af toner/frekvenser.



10 ms er i underkanten.
Men selv inden for et lille interval er der mange toner samtidig.
Forskellen på lyden fra forskellige instrumenter der spiller samme tone er (bl.a.) sammensætningen af toner/frekvenser.


Hmm ja kom også til at tænke på at man jo heller ikke kan instille amplituden via standard Beep komandoen...
Men burde man ikke kunne det måske med en lidt mere indviklet buzzer funktion?



Hvis du kikker her:
http://damb.dk/snip/playtone.html

Er der en PlayTone funktion, i denne angiver tallene 128 og 127 amplituden, summen skal være mindre end 256.



Hvis du kikker her:
http://damb.dk/snip/playtone.html

Er der en PlayTone funktion, i denne angiver tallene 128 og 127 amplituden, summen skal være mindre end 256.


Mm ganske nice funktion... godt nok ikke buzzeren der laver lyden. Men kan sikkert give lidt sjov alligevel hehe


er lidt fasineret af den her kode:
Fold kodeboks ind/udKode 


Kunne man evt. lave den omvendte funktion og på den måde få nogle frekvenser ud på den måde?



Indlæg senest redigeret d. 10.04.2008 17:28 af Bruger #3861
Den "omvendte" funktion hedder FFT



Den "omvendte" funktion hedder FFT


Nå okay fair fair. Det vel bare at konvertere den til en int istedet for en char og så lave nogle lidt besværlige beregninger. Tror jeg har en ide til hvordan jeg skal gøre det hehe. Vil lige eksperimentere lidt med det.

Har lige 2 nye spørgsmål:

1: Hvis man nu vil afspille en lyd i i et "uendelig" loop eller hva man nu kan sige det, og gærne vil ændre tone. Er den rigtige metode så at lave en ny buffer og header og så sende headeren med buffer igen? Uden at lukke headeren helt med waveOutClose? Håber du forstår...

2: Er der en måde hvorpå man kan sætte bufferen på pause eller afslutte den helt selv om den ikk er færdig?



Indlæg senest redigeret d. 10.04.2008 23:05 af Bruger #3861
Du kan sætte flere buffere i kø, men de skal lukkes med waveOutClose til slut.

Der er en waveOutPause funktion.

Jeg mener at kunne huske at man kan stoppe den uden at den er færdig, men det giver nogen voldsomme klik i højtaleren og er ikke helt problemfrit. Det bedste er at have tilpas små buffere og så lade dem køre til ende.



Du kan sætte flere buffere i kø, men de skal lukkes med waveOutClose til slut.

Der er en waveOutPause funktion.

Jeg mener at kunne huske at man kan stoppe den uden at den er færdig, men det giver nogen voldsomme klik i højtaleren og er ikke helt problemfrit. Det bedste er at have tilpas små buffere og så lade dem køre til ende.


Ja den gir nogle ikke så gode lyde med mindre den giver fejl hvilket også kan ske...

Når jeg prøver at lukke den med waveOutClose så fortæller fejlmeddelelsen mig at jeg skal prøve at resette headeren. Det prøver jeg så med waveOutReset.. Men dette låser bare koden så resten ikke bliver eksekveret... Hmmm

Jeg kan ikke helt finde nogle FFT funktioner jeg kan få til at virke... har fundet følgende 2:

http://www.dsprelated.com/showmessage/69924/1.php
Fold kodeboks ind/udKode 


og

http://www.ddj.com/cpp/199500857
Fold kodeboks ind/udKode 


Sorry for den lidt dårlige kode opsætning (copy paste hehe :) )



Indlæg senest redigeret d. 11.04.2008 14:59 af Bruger #3861
<< < 123 > >>
t