Portál AbcLinuxu, 27. dubna 2024 16:30


Dotaz: Generování tónů do souboru

20.10.2015 08:55 rteppp
Generování tónů do souboru
Přečteno: 503×
Odpovědět | Admin
Potřebuji vygenerovat několik sekvencí tónů a uložit je do formátu wav. Představuji si to tak, že zadám frekvenci a délku tónu, délku mezery, další tón. atd... Definici sekvence nejraději do textového souboru. Nemáte někdo, prosím, tip na řešení? RteppP


Řešení dotazu:


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

Odpovědi

20.10.2015 09:08 LL
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Octave?
Řešení 1× (Ilmarinen)
20.10.2015 09:11 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
sox

http://montessorimuddle.org/2012/04/19/generating-and-saving-tones-with-sox/
20.10.2015 14:26 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
přidávám svojí ladičku k prozkoumání:

for n in E2 A2 D3 G3 B3 E4; do play -n synth 4 pluck $n repeat 2; done
20.10.2015 15:19 rteppp
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Hezké :-)

Ale je možno zadat přímo frekvence/délku tónu a mezery mezi nimi?

Např.: 400Hz/300msec, pause_100msec, 600Hz/200msec, pause_50msec, 900Hz/100msec, pause_150msec. To je to co neumím a bolí mě z toho hlava... Děkuji.
20.10.2015 16:00 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
while read line; do a=($line); play -n synth ${a[1]} sin ${a[0]}; sleep ${a[2]}; done < tones.txt

a do souboru tones.txt napiš řádky:
400 .3 .1
600 .2 .05
900 .1 .15
(bez prázdných řádků)
20.10.2015 16:16 rteppp
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Kouzlo na2 :-)

Dnes nemám svůj den, hraji, ale nepodařilo se mi to přes přesměrování dostat do wav.

Můžu poprosit ještě o jedno nasměrování?

Děkuji. RtepP

20.10.2015 16:58 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Tohle uložit nejde. Jedině takhle:

while read line; do a=($line); sox -n -p synth ${a[1]} sin ${a[0]} >> out.wav; done < tones.txt

a tu pauzu přidávat jako další tón s frekvencí 0 s patřičnou délkou. (Takže třetí sloupeček v tom souboru nebude.)
Záleží k čemu to potřebujete, určitě budou i lepší řešení.
21.10.2015 01:12 rteppp
Rozbalit Rozbalit vše Re: Generování tónů do souboru

Děkuji za pomoc.

To bylo přesně to co jsem potřeboval.

Problém vyřešen :-)

Sekvence vygenerovány a použity

RteppP

21.10.2015 15:39 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Nebudou tam mezi tóny vadit ty hlavičky formátu soxu (-p)? Raději bych použil raw formát bez hlaviček a celý raw soubor finálně zkonvertoval do wavu/flacu/... Je to jen pár bajtů, ale slyšet určitě budou.
21.10.2015 20:04 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
zřejmě to způsobuje ty 'popy' na začátku, proto jsem psal, že bude asi lepší řešení. Sox moc neznám, ale čistě nějaký pcm výstup mi taky napad, jako možné lepší řešení.
21.10.2015 20:36 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
zkusil jsem ty hlavičky umazat a je to čistý. Možný je tedy tento hack:

sed -i 1!s/\.SoX/\nDELETEME/; /DELETEME/d tones.raw
21.10.2015 20:37 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
samozřejmě chybí apostrofy, takže tak:

sed -i '1!s/\.SoX/\nDELETEME/; /DELETEME/d' tones.raw
21.10.2015 21:42 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Máš celou řadu možností

Buď budeš sox spouštět ve smyčce a jeho výstup budeš přidávat do souboru. Pak jako výstupní formát potřebuješ něco bez hlaviček, tedy raw. Místo -p (stdout ve formátu soxu) použij raw formát, kterému naspecifikuješ parametry a místo názvu výstupního souboru dáš pomlčku
sox -n -t raw -c 1 -e signed-integer -r 48000 -b16 - synth delka sine frekvence
Pak musíš výsledný soubor načíst do soxu se stejnými parametry jako ten raw soubor (protože tam nejsou žádné hlavičky, sox nemůže jinak vědět, co to je za data) a přeuložit do standardního formátu s hlavičkou (wav, flac,...)

Nebo nespouštěj sox ve smyčce, ale celý předpis mu vygeneruj najednou do seznamu efektů a spusť jej jen jednou (ticho vyrobíš tím synth délka sine 0, jak již tu bylo uvedeno):
sox -n -r 48000 -c 1 -b16 out.wav synth 1 sine 500 : synth 1 sine 0 : synth 1 sine 1000 : synth 1 sine 2000
21.10.2015 21:49 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
Ach so... pěkné.
21.10.2015 21:21 RM
Rozbalit Rozbalit vše Re: Generování tónů do souboru
koukam, že tak jednoduchý to s tím mazáním nebude, navíc ten sed není dobře

Založit nové vláknoNahoru

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

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