Portál AbcLinuxu, 30. dubna 2025 10:12

Ladička

3.5.2008 13:12 | Přečteno: 3956× | Linux | poslední úprava: 4.5.2008 20:44

Ahojte. Zkusil jsem v Pythonu napsat jednoduchou kytarovou ladičku, která se pokouší dolní polovinu frekvenčního spektra přičíst k horní polovině tak, aby se všechny harmonické spojily do jedné frekvence (čert vem nelinearity). Možná by to mohlo lépe reagovat než „běžné“ ladičky, ale rád bych někoho poprosil o otestování:

#!/usr/bin/python
# -*- coding:utf-8 -*-

from __future__ import division
from scipy import *
import alsaaudio

def record_and_analyze(N, recfreq):
    inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE)
    inp.setchannels(1)
    inp.setrate(recfreq)
    inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)
    pos = 0
    bytes = []
    while True:
        l, chunk = inp.read()
        pos += l
        if pos == N:
            bytes.append(chunk)
            break
        if pos > N:
            bytes.append(chunk[:(N - pos)*2])
            break
        bytes.append(chunk)
    data = fromstring(''.join(bytes), int16)
    spectrum = abs(fft(data)[:(N//2 + 1)])
    spectrum[0] = 0 #remove DC component

    for i in range(1, (len(spectrum)+1)//2): #join harmonics
        spectrum[i*2] += spectrum[i]
        spectrum[i] = 0

    return argmax(spectrum)*recfreq/N

tones = ['A', 'B', 'H', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']
while True:
    f_fund = record_and_analyze(N = 2**16, recfreq = 48000)
    x_tone = 12*log(f_fund/440)/log(2)
    i_tone = int(x_tone + 0.5)
    print '%+.2f' %(x_tone - i_tone), tones[i_tone % 12]

Zkuste podle toho někdo naladit kytaru nebo prostě jakýmkoli způsobem ověřit správnost. Mně to sice funguje líp než elektronická ladička (KORG), ale to nemusí nic znamenat. Nevím přesně, které balíčky jsou potřeba, ale rozhodně se nic nezkazí nainstalováním těchto:
python-alsaaudio scipy python-matplotlib numpy

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

3.5.2008 14:55 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Samozřejmě, že do mikrofonu můžete třeba i zazpívat stupnici. Ukazuje to odchylku v centech (sto centů je jeden půltón). Zkusil jsem to a připomínalo to Hvězdnou pěchotu nebo meluzínu, snad mě nikdo neslyšel.
-0.06 C
+0.13 C
+0.05 D
-0.00 E
-0.08 E
-0.18 F
+0.03 G
-0.10 G
-0.08 A
-0.11 H
-0.11 C
Jsem opravdu silně rozladěn ;-)
3.5.2008 15:13 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
No jestli to číslo x.yz jsou centy zobrazené s přesností na setiny, tak to není taková katastrofa ;-)

Btw. nějak mi uniká, jak funguje ten algoritmus. Teda ne že bych si nedokázal vyvodit, co se tam děje, ale není mi tak úplně jasné, jaktože to dělá to, co tvrdíš, že to dělá.
Quando omni flunkus moritati
4.5.2008 01:45 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
No jestli to číslo x.yz jsou centy zobrazené s přesností na setiny, tak to není taková katastrofa ;-)
Bohužel to tak není, deset centů skutečně pro mně není žádná míra ;-)
Btw. nějak mi uniká, jak funguje ten algoritmus. Teda ne že bych si nedokázal vyvodit, co se tam děje, ale není mi tak úplně jasné, jaktože to dělá to, co tvrdíš, že to dělá.
Vycházím z toho, že kteroukoli frekvenci ve spektru můžu vynásobit dvěma a pořád se jedná o stejný tón. Takže vezmu nějakou frekvenci (třeba číslo 1) a přičtu k frekvenci číslo 2. Pak frekvenci číslo 2 přičtu ke čtvrté. Pak třetí k šesté. Pak čtvrtou k osmé. A tak dále až přestěhuju celé spektrum pouze do jedné oktávy, do horní poloviny spektra. No a tam se ty tóny lépe hledají – aspoň mi to tak přijde.

Původně jsem chtěl nějak vyhledávat všechny vyšší harmonické, ale je to zrádné, protože už trojnásobek dává úplně jiný tón (v temperovaném ladění trochu falešný).
4.5.2008 20:06 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Rozumím tomu kódu dobře, že se FFT počítá pokaždé jenom ze 34 vzorků? To mi na nějakou přesnou analýzu přijde docela málo...

Navíc si nejsem jistý ani tím algoritmem (ale přiznávám, že jsem ho nijak podrobněji nerozebíral), teď jsem ho zkusil (snad správně) použít na 440Hz čistý tón vzorkovaný 8kHz, 200 vzorků - vyšlo 2, což je H, pokud se indexuje od nuly... S 34 vzorky vyšlo 8, což je asi F...
Quando omni flunkus moritati
4.5.2008 20:40 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Hehe, 2**17 není totéž co 2*17. Nahrává to 2**17 bajtů, tedy 2**16 vzorků, což 65536. Při vzorkovací frekvenci 48 kHz to představuje dobu záznamu asi 1.37 sekund a z toho plyne i rozlišovací schopnost (převrácená hodnota) 0.73 Hz. Když pustím do repráků 440Hz.wav, tak dostanu
-0.02 A
+0.01 A
+0.01 A
což je doufám rozumné.

Jenže, mám tam chybu! Bajty a vzorky nejsou totéž. Jak na potvoru se to ale nikde neprojevilo. Ale spravím to, i když to na funkci nebude mít vliv. Krát dva to mělo bejt!
4.5.2008 21:49 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Jo, to už je o něco lepší, když si za ** dosadím << (;-)), tak mi to vychází na A + 0.03

Mám tady starší záznamy strun na kytaře, zkusil jsem to s G strunou a vyšlo G-0.2.

Pro porovnání jsem zkusil ještě hledání prvního maxima autokorelace, to vyšlo G-0.31 (tomu bych moc nevěřil), a pak nějaký algoritmus detekce sinusovky, co jsem vyhrabal na disku, to vyšlo G-0.21...

Takže se zdá, že ten algoritmus funguje (omlouvám se, že jsem pochyboval ;-)) a vzhledem k tomu, že to počítá počítač, tak ani moc nevadí to FFT na 65k vzorcích...

(Btw. ty odchylky jsou tam proto, že ta kytara nebyla naladěná, když jsem to nahrával)
Quando omni flunkus moritati
Josef Kufner avatar 4.5.2008 22:57 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Ladička
** je mocnina ;-)
Hello world ! Segmentation fault (core dumped)
4.5.2008 23:55 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Bude to u 2** fungovat, nebo ne? ;-)
Quando omni flunkus moritati
Josef Kufner avatar 5.5.2008 01:07 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Ladička
Bude, ale bude se to počítat daleko a zbytežně složitěji.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 5.5.2008 01:10 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Ladička
Hmm, měl bych jít spát. Nějak se mi motají písmenka a fungovat to bude jen pokud "2 ** n" nahradíš za "1 << n" nebo "2 << (n - 1)".
Hello world ! Segmentation fault (core dumped)
5.5.2008 03:50 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Já to nechám bez dalšího komentáře...
Quando omni flunkus moritati
4.5.2008 20:46 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
2 ** 17 = 131 072
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
3.5.2008 16:56 Jirka P
Rozbalit Rozbalit vše Re: Ladička
Nahravka by nebyla?

Jinak presnost tho programu je +- Hertzy, coz znamena (kolem C1) +- desitky centu.
3.5.2008 20:04 muf
Rozbalit Rozbalit vše Re: Ladička
To bude tím, že centy jsou odvozeny od rovnoměrně temperovaného ladění, zatímco zpěváci inklinují k přirozenému ladění, pokud nemají k referenci doprovodný nástroj :-). Ale pro přirozené ladění by ty hodnoty byly podstatně větší ;-).
Josef Kufner avatar 3.5.2008 21:08 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Když sestra přitáhla domu kytaru, nainstaloval jsem lingot, abych trpěl co nejméně. Je to grafické, plné chyb, ale ukazuje to ručičku a písmenko. Největší problém při ladění jsem měl se zjištěním, který tón vlastně má na které struně být :-D
Hello world ! Segmentation fault (core dumped)
4.5.2008 00:25 phr | skóre: 13 | blog: no_comment | Klatovy
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Tohle jsem kdysi napsal v turbopascalu. Opravdu jsou nové programovací jazyky lepší ? A v čem ?
program Ladicka;

Uses Crt;

var Ton : char;

begin
  repeat
    Write('Zadej ton (E,H,G,D,A,6,K) : ');
    ReadLn(Ton);
    Ton := UpCase(Ton);
    Case Ton of
     'E' : Sound(330);
     'H' : Sound(247);
     'G' : Sound(196);
     'D' : Sound(147);
     'A' : Sound(110);
     '6' : Sound( 82);
    Else
         NoSound;
    End;    {of Case}
  until (Ton = 'K');
  NoSound;
end.
"Umělá inteligence se nemůže rovnat přirozený blbosti"
4.5.2008 01:00 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
No pro začátek tenhle tvůj program závisí na hudebním sluchu uživatele. Ten v blogu ne.
Quando omni flunkus moritati
4.5.2008 21:40 phr | skóre: 13 | blog: no_comment | Klatovy
Rozbalit Rozbalit vše Re: Ladička
No, jenže pak na tu kytaru hrát aspoň trochu hudebního sluchu vyžaduje a to už se okecat nedá :-)
"Umělá inteligence se nemůže rovnat přirozený blbosti"
4.5.2008 21:42 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Ladička
Jsem živým důkazem toho, že nevyžaduje :-) Ono to pak, pravda, podle toho vypadá, to nemůžu popřít :-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.
4.5.2008 21:52 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
To sice jo, ale hrát na kytaru vyžaduje míň hudebního sluchu, než naladit ji podle čistého tónu. Respektive ještě jinak - pokud ji někdo, kdo má špatný hudební sluch, zkusí naladit podle toho sluchu, tak to potom dopadne hůř, než když ji ten samý člověk naladí podle ladičky.
Quando omni flunkus moritati
xvasek avatar 5.5.2008 10:43 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Ladička
Ne.

"Hudební sluch" je schopnost sluchem identifikovat přehrávané noty, což se dokazuje tak, že osoba s hudebním sluchem je schopna noty buď zapsat, nebo zahrát, přičemž není nutně potřeba trefit správně první notu a výsledek je možné přehrát / zapsat transponovaně - tedy výš nebo níž, než je originál, ale se zachováním správných "vzdáleností" jednotlivých dalších not.

Pak máme "absolutní sluch", který umožňuje přesně identifikovat notu, tzn. absolutní sluchaři umí například přehrát / zapsat poslouchanou skladbu bez transpozice (oproti hudebním sluchařům trefí i první notu) nebo umí naladit hudební nástroj bez potřeby referenčního zvuku nebo bez kontroly.

K ladění je potřeba poznat, jestli zvuk laděného nástroje odpovídá referenčnímu zvuku, resp. jestli je dost referenční. K ladění první struny lze použít buď absolutní sluch, nebo ladičku, hudební sluch je možno využít pro ladění dalších strun - takoví lidi nepotřebují mačkat na jiné struně stejný tón aby věděli, jestli je dobře neladěná, ale jenom brnkají na struny a kroutí knoflíky. Lamky bez hudebního sluchu (jako třeba já :) dokážou poznat, jestli se tón jedné struny blíží stejnému tónu zahranému na jiné struně - což je dost úzká podmnožina "hudebního skuchu". :-)

Každopádně pro hraní není potřeba ani hudební, ani absolutní sluch - stačí interpretovat noty nebo jiné značky, nebo opakovat jistý - předem daný - postup.
frEon avatar 5.5.2008 12:28 frEon | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Ladička
otazka je, jak moc s hudebnim sluchem souvisi schopnost udrzet rytmus. pokud clovek rytmus neudrzi, tak moc hudby nevyprodukuje.
Talking about music is like dancing to architecture.
5.5.2008 12:29 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Ladička
I vyprodukuje. Ale lidi s rytmickým cítěním pak mají blbý kecy :-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.
xvasek avatar 5.5.2008 13:34 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Ladička
LOL, přesně tak. :-)
5.5.2008 22:11 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
"Hudební sluch" je schopnost sluchem identifikovat přehrávané noty, což se dokazuje tak, že osoba s hudebním sluchem je schopna noty buď zapsat,...
Řekl bych, že jsi opomněl rozpoznání toho, jestli něco ladí nebo ne v celé hudbě, například rozpoznat, že nějaký nástroj není správně naladěný (jsou lidi, kteří poznají, že basa v rockové muzice je o deset centů pod tónem, jsou lidi - např. já - kteří většinou nejsou schopni určit, co ta basa hraje ;-))
Quando omni flunkus moritati
xvasek avatar 9.5.2008 11:35 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Ladička
Asi jo, přesnější by bylo napsat něco, jako že hudební sluch umožňuje "rozpoznat rozdíl (vzdálenost) mezi tóny", což pak obsahuje i rozpoznání rozladěnosti.
4.5.2008 22:25 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Snad tenhle mírnej flame zarazím, hned v začátku tím, že se zeptám, co je to hudební sluch. Doufám, že ale neleju volej od ohně. Taková otázka je totiž taky zřejmě docela flambovací.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
4.5.2008 23:56 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Podle mě (když to vezmu hodně jednoduše) schopnost rozlišit, že něco v té hudbě není v souladu se zbytkem.
Quando omni flunkus moritati
5.5.2008 00:27 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Což je ovšem značně vágní definice.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
5.5.2008 03:51 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Zase jsem zapomněl, kam píšu komentář...
Quando omni flunkus moritati
4.5.2008 12:38 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Bha! Někde je chyba.
gentlespring% python ladicka.py
Traceback (most recent call last):
  File "ladicka.py", line 40, in ?
    i_tone = int(x_tone + 0.5)
OverflowError: cannot convert float infinity to long
record_and_analyze vrací 0. V chuncích jsou samé nuly. Capture mám zapnuté na všech zařízeních, kde to šlo.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
4.5.2008 12:45 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Hmhm, nulovou frekvenci jakožto maximum to může najít opravdu pouze tehdy, když je nahrané naprosté ticho. Ale dík za bugreport, může se to hodit jako diagnostická pomůcka.

Mohl bys prosímtě zkusit tohle?
arecord -c 1 -r 48000 -f S16_LE -t wav > nahravka.wav || aplay nahravka.wav 
Spusť to, něco namluv a dej ctrl+c. Mělo to zopakovat, co jsi řekl.
Josef Kufner avatar 4.5.2008 16:37 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Ladička
Naprosté ticho se nahrává celkem lehce. Stačí nahrávat z neexistujícího/ztlumeného vstupu ;-)
Hello world ! Segmentation fault (core dumped)
4.5.2008 17:58 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Jéja. Buď můj komentář zmizel, nebo jsem ho neodeslal. Tak znova:

To, proč to nejdřív dávalo samé nuly bylo myslím opravdu tím, že jsem měl ztlumen Capture, nebo Digital kanál. Mám notebook, ovladač hda_intel, čip bude asi nějakej Realtec. Co ty kanály znamenají nevim. Ani jeden z nich nesmí asi být moc zesílený, jinak se zřejmě něco přebudí a nahrávka hrozně prcká.

Šoupátka jsem pošoupal tak, aby arecord nahrál co nejkvalitnější nahrávku. A zkusi to s naladěnou kytarou. Hrál jsem někde blízko otvoru. Možná bych ladičce usnadnil práci, kdybych hrál v půlce strun.

"Ticho" - nahrává mi to větráček, takže moc ticho není.
-0.12 B
-0.12 B
Nejtlustčí struna, E:
-0.12 B
+0.33 F
+0.33 F
+0.48 F
+0.48 F
+0.48 F
+0.33 F
+0.33 F
+0.33 F
Další, A
+0.23 F#
+0.09 A
+0.21 A
+0.09 A
+0.09 A
+0.09 A
+0.09 A
+0.23 F#
+0.09 A
Další, d
+0.23 F#
-0.31 A
-0.31 A
-0.31 A
-0.31 A
-0.25 A
-0.31 A
Dlaší, g
-0.12 B
+0.03 G
+0.09 G
+0.09 G
+0.09 G
+0.09 G
+0.09 G
+0.09 G
Další, b
-0.12 B
+0.04 H
+0.25 H
+0.09 H
+0.25 H
+0.09 H
+0.09 H
Další, e
+0.09 H
-0.38 F#
-0.45 F#
-0.38 F#
-0.45 F#
-0.38 F#
-0.45 F#
-0.45 F#
Znova, E
-0.12 B
+0.33 F
+0.33 F
+0.48 F
-0.38 F#
+0.30 H
Takže test nedopadl moc dobře. Nemám teď moc čas se ladičkou zabývat, ale je to velmi zajímavé téma a někdy se na ni podívám a pohraju si s ní.

Možná by jsi mohl ladičku testovat nahrávkama strun, kterých je an internetu habaděj. Já podle nich ladím kytaru.

Hledej vp795 na http://freesound.iua.upf.edu/

BTW, zohledňuješ tam nějak temperované ladění? Myslím, že ne, co?
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
5.5.2008 01:59 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Tisíceré díky za experimentální data! Takže se strunami A,G,B je to v pohodě. A teď ty další: nejtlustší struna E (poprvé) – z toho vůbec nejsem moudrý. Pak jsi ale brnkl znovu a tak to ukazuje blbosti až na tu docela poslední hodnotu (+0.30 H). To je evidentně třetí harmonická od E. Pak struna D – tam to zase chytá třetí harmonickou, což je to "A". A poslední, nejtenčí struna e měla jako první hodnotu zase třetí harmonickou (to je těch +0.09 H) a dál jsou nesmysly.

Závěr: Chytá to třetí harmonickou, což je přesně to, čeho jsem si myslel, že se zbavím :-( Krom toho to ukazuje nějaké blbosti, které netuším co znamenají (přebuzení? šum?):-( Každopádně dík za test.

Jasně, celé to pracuje s temperovaným laděním, kde se frekvence vypočítají takto:
#!/usr/bin/python
tones = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'B', 'H']
for i in xrange(-20, 37):
    print '%2s %10.2f Hz' %(tones[i%12], 440*2**((i-9)/12.0))
4.5.2008 20:53 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Proč na ty bytes používáš list? Není lepší požít array? Buďto přímo pythoní, ale koukám, že scipy/numpy má taky nějaké.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
5.5.2008 02:15 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Taky se mi to moc nelíbí. Ale u jiných polí jsem nenašel způsob, jak připojovat jedno pole za druhé. Anebo bych musel předem nějaké pole „naalokovat“ s požadovanou velikostí a pak tam nějak sypat data.

Než jsem použil tento způsob, tak jsem chvilku zkoušel. Už jsem byl rozhodnutý to napsat v céčku a zavolat přes ctypes, ale nakonec to dopadlo takhle. Ač je to nic moc, je to překvapivě rychlé, takže na zátěži procesoru to ani nepoznám.

Kdybys našel elegantnější cestu, sem s tím! :-)
5.5.2008 06:50 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Trochu jsem si hrál s pythoním array.fromstring(), ale nedopadlo to zatím moc dobře.

Namísto toho počítání s pos, bych do bytes dával vždycky celý chunk a pokud je dat moc, tak to uřízl. Asi nějak takhle:
    while len(bytes) < N:
        l, chunk = inp.read()
        bytes.append(chunk)
    bytes = bytes[:N]
    data = fromstring(''.join(bytes), int16)
Je to víc strightforvard a o mnoho víc paměti si to neukousne. Jestli je to rychlejší samozřejmě nevim. Proč vůbec nepoužít všechny data, co jsme dostali a proč je ořezávat?
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
5.5.2008 10:03 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Jo, to je určitě daleko čitelnější a jak říkáš, paměti je dost. Svou verzi jsem psal s představou, že téměř nikdy nebude potřeba nic ořezávat, protože chunky přicházejí skoro vždycky v mocninách dvou a celková délka má být taky mocnina dvou.

Je to především kvůli rychlosti FFT. Ta se sice vypočítá pro jakýkoli počet dat (N), ale je-li N složeno z mnoha malých prvočísel, výpočet je daleko rychlejší. Ideální je tedy mocnina dvou. Schválně, když vypočítám fft pro 2**17, je to zlomek sekundy. Ale hned o jedničku níž je prvočíslo (Mersennovo) a tam výpočet trvá přes minutu – ani jsem to neměřil.
>>> from scipy import *
>>> a = arange(2**17)
>>> fft(a) # tohle je hned hotové
array([  8.58986906e+09 +0.00000000e+00j,
        -6.55360000e+04 +2.73426110e+09j,
        -6.55360000e+04 +1.36713055e+09j, ...,
        -6.55360000e+04 -9.11420366e+08j,
        -6.55360000e+04 -1.36713055e+09j,  -6.55360000e+04 -2.73426110e+09j])
>>> a = arange(2**17-1)
>>> fft(a) # ... a tady výpočet trvá celou věčnost
Odřezávání dat anebo naopak doplňování nulami je celkem běžný trik, pokud jde o rychlost fft.
5.5.2008 11:03 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Zajímavé. Chytré.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
5.5.2008 10:11 Smazáno | skóre: 21 | blog: tezkorict
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdarec.

Já bych to docela rád otestoval, ale nemám jak... Nechceš mi spíchnout redukci tlustej_jack(female) -> tenkej_jack(male)?
5.5.2008 11:01 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Obchod. Dej jim za to pár krejcarů, který po tobě budou chtět.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
5.5.2008 12:46 disorder | blog: weblog
Rozbalit Rozbalit vše Re: Ladička
stereo->stereo potom nie je uzemnene ;)
5.5.2008 22:22 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Cože?
Quando omni flunkus moritati
5.5.2008 23:45 disorder | blog: weblog
Rozbalit Rozbalit vše Re: Ladička
HOVORIM, ZE ZALEZI NA TOM AKO PREPAJAS MONO VYSTUP NA STEREO VYSTUP. POCUJES?

+ a napriklad moj sb pci128 ani nereaguje na mono vstup
5.5.2008 23:46 disorder | blog: weblog
Rozbalit Rozbalit vše Re: Ladička
samozrejme na vstup
7.5.2008 00:04 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
1) nemusíš hulákat

2) nevidím souvislost mezi redukcí velký/malý jack a stereo a mono výstupem

3) spojení mono výstupu (když už jsi to načal) a stereo vstupu je jednoduché. Prostě ten výstup přijíš na špičku i prstýnek. Země jsou samozřejmě spojené. Jak jednoduché, že?
Quando omni flunkus moritati
5.5.2008 14:10 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Jé, zdar, máš na mysli tohleto? http://gme.cz/cz/index.php?page=product&detail=070-969 Tož to nemám, mám všude jen tenké džeky :-( Ale třeba to půjde nějak bez drátů, milý Marconi ;-)
5.5.2008 14:44 Smazáno | skóre: 21 | blog: tezkorict
Rozbalit Rozbalit vše Re: Ladička
Ty mi uděláš bezdrátovou kytaru? To by bylo super! :)

Když už to stojí 50Kč, tak bych si to fakt mohl koupit. Jen mi ten tlustej kus příjde dost krátkej. Mrknu na to až půjdu kolem GM. No, tak to do Brna zase nepojedu ;)
5.5.2008 16:17 disorder | blog: weblog
Rozbalit Rozbalit vše Re: Ladička
ved to je nejaka redkucia DIN -> hruby jack
5.5.2008 22:25 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Ladička
Ty mi uděláš bezdrátovou kytaru? To by bylo super! :)
Vysílačky se taky nechají koupit... např.: http://www.muzikus.cz/pro-muzikanty-testy/Samson-Airline-aneb-volny-pohyb-zarucen~07~brezen~2003/
Quando omni flunkus moritati
14.5.2008 18:14 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Koukám se teď na tu ladičku. Konkrétně se koukám na spektrální analýzu, kterou dělá baudline (http://www.baudline.com/) a snažím se najít nějakej pšknej způsob, jak rozpoznat tón. BTW, baudline obsahuje také nějaký detektor tónu. Možná je i v těch veřejných zdrojácích. Nevim, používám uzavřenou verzi.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
14.5.2008 22:14 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Rozpoznat tón zase taková alchymie není, pokud se doslova neztrácí v šumu. Takřka úplně spolehlivé je najít pár maxim a zjistit, které z nich je základní mód (stačí najít celočíselné poměry). S vyhledáváním maxim je potřeba si trochu pohrát, protože křivka bývá „chlupatá“, takže se hodí ji předtím trochu vyhladit.

No, zkrátka jde to, ale už to není prográmek na čtyřicet řádků. A když ani pak si počítač není jistý tónem, tak ani člověk.
14.5.2008 21:20 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Máš konkrétní důvod to capturovat jako S16_LE? Dal bych tam U16_LE, nebo dokonce U24_LE v domění, že pak nebudu muset dělat abs(fft()) a také v domění, že to bude trocha přesnější, což nevím, jestli má význam.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
14.5.2008 21:59 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Ladička
Ta absolutní hodnota se počítat musí. Nejde totiž o absolutní hodnotu ve smyslu vymazání znaménka, ale o absolutní hodnotu komplexních čísel, které vrací FFT. Je tam reálná a imaginární část, což souvisí s tím, jak šikovně se v tom signálu „schovává“ sinus a jak kosinus. Kdyby se posunula fáze signálu, změní se reálná i imaginární část FFT, ale absolutní hodnota zůstane. Je to na delší vyprávění, klidně mi napiš na jabber.

Buď jak buď, samplovat 24 bity mě nenapadlo. Mám tam tolik šumu, že by to ani nemělo smysl, ale přesto – dík za nápad.
15.5.2008 12:27 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Kdybych napsal na jabber, tak z toho budu mít zisk jenom já a možná i ty. Takhle se z naší plodné diskuze může poučit víc lidí a bude víc kvalitních ladiček a to znamená blaho pro všechny.

FFT bych si měl asi nastudovat sám. Nějaké pěkné odkazy by byly? Na Wikipediu se podívám jako první.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
15.11.2008 18:21 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Ladička
Odpovědět | Sbalit | Link | Blokovat | Admin
Podle toho, co jsem se zatím dozvěděl studiem Zpracování číslicových signálů na VŠB by měla proti šumu pomoct autokorelace. Zkusím se na to někdy podívat...
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.