Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - Práce se zvukem (Jak mám uložit do proměnné třeba 5. vzorek ze zvukového souboru?)

Mám zvukový soubor. Zvukový soubor obsahuje pípnutí o frekvenci 1000 Hz. Kdybych chtěl znázornit tenhle zvuk graficky, uviděl bych samé vlnění (sinusoidy). Když si podrobně rozebereme jednu vlnu (sinusoidu), tak zjistíme, že se skládá z mnoha vzorků. Já potřebuju nějak zjistit na jaké pozici jsou jednotlivé vzorky.

Předmět Autor Datum
/\ / \ / / \/ Právě jsem nakreslil zubatou sinusoidu. Dalo by se říct, že se skládá z 8 vzorků. Čár…
Mirek Doležal 01.10.2014 14:24
Mirek Doležal
Jak to myslíš "uloženou pozici"?
Wikan 01.10.2014 14:45
Wikan
Při sinusoidě je téměř každý vzorek někde jinde nezávisle na čase
Mirek Doležal 01.10.2014 14:58
Mirek Doležal
Třeba moje sinusoida v 8 bitovém zvuku. Každý vzorem může mít 8 pozicí.
Mirek Doležal 01.10.2014 15:00
Mirek Doležal
Zkrátka musí mít nějaký označení kde je (v jaký hladině)
Mirek Doležal 01.10.2014 15:01
Mirek Doležal
To je ale přímo hodnota toho vzorku.
Wikan 01.10.2014 15:02
Wikan
No a přesně tu hodnotu nevim jak získat a uložit do proměnné nový
Mirek Doležal 01.10.2014 15:21
Mirek Doležal
Viz odpověď od MM. nový
Wikan 01.10.2014 15:25
Wikan
8bitový zvuk má 256 pozic. nový
Wikan 01.10.2014 15:02
Wikan
Nacitas si wav header, zistis bits per sample, prenasobis, a nacitas si Xte bajty v spravnom poradi.… nový
MM.. 01.10.2014 15:21
MM..
http://msdn.microsoft.com/en-us/library/ff827591.a spx - MSDN priklad pre nacitanie a prehratie wav… nový
MM.. 01.10.2014 15:25
MM..
BTW. resp. neviem ci chapem co chces. "pozicia" vzorku X v case je X/Fvzorkovacia sekund. Logicky z… nový
MM.. 01.10.2014 15:36
MM..
Dejme tomu, že pozice v čase je x (vodorovně) a pozice kterou chci vědět je y (svisle). Nemyslim poz… nový
Mirek Doležal 01.10.2014 15:50
Mirek Doležal
Ked nezacnes pisat jasne co sa snazis vyrobit z coho, tak ti ani vlastna mati nebude rozumiet. Hodn… nový
MM.. 01.10.2014 15:52
MM..
Myslim pozici na kterou ukazuje šipka v tomhle obrázku: Bez_n_zvu.png nový
Mirek Doležal 01.10.2014 15:55
Mirek Doležal
Precitas si to zo suboru (viz vyssie) alebo si to vypocitas (viz vyssie). Vsetko som uz napisal vyss… nový
MM.. 01.10.2014 15:57
MM..
Ked to chces priamo vzorcom pre X-tu vzorku tak: hodnota = sin(X*2*PI*Fsinusovky/Fvzorkovacia); ten… nový
MM.. 01.10.2014 16:03
MM..
watch nový
MaSo 01.10.2014 16:02
MaSo
Tady je to co chci v pseudokódu SoundPlayer zvuk; int db; zvuk = new SoundPlayer(@"C:\1.wav"); db… nový
Mirek Doležal 01.10.2014 17:43
Mirek Doležal
http://stackoverflow.com/questions/8754111/how-to- read-the-data-in-a-wav-file-to-an-array nový
Wikan 01.10.2014 17:59
Wikan
byte[] data = File.ReadAllBytes(@"C:\1.wav"); nový
Mirek Doležal 01.10.2014 18:17
Mirek Doležal
A? nový
Wikan 01.10.2014 18:21
Wikan
Tak ked to chces takto stylom hura, tak potom si potrebujes este nastudovat toto https://ccrma.stanf… nový
MM.. 01.10.2014 18:22
MM..
Konečně už vim o co jde :D teď jen rozluštit ty čísla podle stránky a pujde to doufám :D nový
Mirek Doležal 01.10.2014 18:41
Mirek Doležal
Tak jo už jsem se naučil číst a zapisovat do wav. Vytvořil jsem třeba náhodný zvuk. dík za radu :) poslední
Mirek Doležal 02.10.2014 17:04
Mirek Doležal
Uz som ten link daval http://msdn.microsoft.com/en-us/library/ff827591.a spx body 1 az 5 su o tom ja… nový
MM.. 01.10.2014 18:04
MM..

/\
/ \ /
/ \/

Právě jsem nakreslil zubatou sinusoidu. Dalo by se říct, že se skládá z 8 vzorků. Čárka není vzorek ale jenom spoj mezi jednotlivými vzorky.

/\
. . .
/ \ /
. . .
/ \/

Právě jsem nakreslil zubatou sinusoidu ale se vzorkama (tečky).

Takhle nějak vypadá grafické znázornění mého souboru ze zvukem o 1000 Hz. Těch sinusoid je tam zamozdřejmě víc.

Každý vzorek ale přece musí mít nějakou uloženou pozici, kde je ne?

Já tu pozici chci zjistit, najít a potom jí uložit do proměnné.

Nacitas si wav header, zistis bits per sample, prenasobis, a nacitas si Xte bajty v spravnom poradi.
google pomoze s wav headeom.
Ak to neni wav, tak potrebujes kniznice ktore to dekoduju.

P.S. zacni radsej s hello world, a potom postupne sa dostanes o takych 5rokov aj k zobrazovaniu wav

BTW. resp. neviem ci chapem co chces.
"pozicia" vzorku X v case je X/Fvzorkovacia sekund. Logicky z toho vyplyva ak mas 1000Hz tak pozicia vzorku v sinusovke je X/(Fvzorkovacia/1000).
Ak sa snazis generovat sinusovku, tak to hlavne nerob dementne jak to robit chces, ale rob to pomocou uhla fi (rotujucej jednotkovej kruznice).
fi=0; //len uplne na zaciatku, pocas generovania zvuku fi nikdy nemenit ani pri zmene frekvencie ani nikdy.
while(neco){
vzorka = sin(fi);
fi += (Fzvuku*2*PI)/Fvzorkovacia;
if(fi>2*PI) fi-=2*PI;
}

Tady je to co chci v pseudokódu

SoundPlayer zvuk;
int db;

zvuk = new SoundPlayer(@"C:\1.wav");

db = zvuk.volumeAT(5000); // do proměnné db se uloží hlasitost vzorku z 5. sekundy ze souboru zvuk

zvuk.volumeAT(6000) = db; // do 6. sekundy souboru zvuk se uloží proměnná db

Uz som ten link daval
http://msdn.microsoft.com/en-us/library/ff827591.a spx
body 1 az 5 su o tom jak nacitat vzorky z wav do pola.

P.S. a ked chces tie hodnoty z pola pouzivat tak si najprv musis otestovat hodnoty channels a bitDepth ktore si si nacital v bode 4 z hlavicky, ptz wav moze byt mono aj stereo a aj 8bit alebo 16bit. A vzorkovacia frekvencia daneho wav je nacitana do premennej sampleRate (wav mozu mat roznu vzorkovaciu frekvenciu takze pri prehravani to nemozes ignorovat)

Zpět do poradny Odpovědět na původní otázku Nahoru