Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: AudioFormat ja useampi kanava

Sivun loppuun

HannuTapio [08.07.2015 10:11:33]

#

AudioFormat,

int channels = 1;  // Tämä on mono
int channels = 2;  // Tämä on stereo
int channels = 3-xx;  // Entä kuinka nämä channels tästä eteenpäin, eri tietokoneissa ?

AudioFormat audioformat = new AudioFormat ( 22050 , 16 , channels , true , false );

Minulla on kevyt efekti engine testissä AOv4.00+ kanssa.

Mitenkä tuo jos laitan channels = 8; niin, mitenkä nämä efektit sitten soivat eri tietokoneissa.

Tuleeko nuo ulos, esim 5+1 tai 7+1 tai mitä eri stereokoosteita sitten onkaan, niin, eri kaiuttimista.

Minä en tiedä mikä tuo channels on, onko se äänikanavien määrä, vaiko stereolaitteitten ulos tulo kaiuttimen numerot.

Minulla on korvakuulokkeet tietokoneessani, niin, nämä äänet tulevat vasen ja oikea ihan oikein, mutta, entä jos jollakulla on kotiteatteri jossa on jotain 5+1 tai 7+1 stereo toimintaa ? Lähteekö nää 8 channel äänet sitten tulemaan eri kaiuttimista, vai soiko ne ihan kaikissa stereo laitteissa vain vasen ja oikea, kuten toivon ?

Eli, yritän rakentaa audio ympäristöä, kevyt tunes efekteille, näitä kevyt saha, sin, random raitoja, ja niille tarvitsen kanavia, vaikka jotain 8, mutta tahdon silti vain tavallisen stereo soiton, vasen ja oikea, en halua tällä kertaa tukea 5+1 tai 7+1 jne.. laitteille.

Mod. siirsi teknisen kysymyksen Lautapelisivusto-projektin keskustelusta.

TuomasK [08.07.2015 11:38:34]

#

Eikös tuolla javan dokumenteissa sanota ihan selvästi että channels on "The number of audio channels in this format (1 for mono, 2 for stereo)", eli siis kertoo kanavien lukumäärän, ei mitään kaiuttimien numeroita.

HannuTapio [08.07.2015 12:33:52]

#

Channels,

Ok, kiitos, minä vain tahdoin varmistaa, että efektit eivät sitten ala kuulumaan taka kaiuttimista jos käytän vaikka 4-8 kanavaa.

En myöskään tiedä kuinka monta kanavaa keskiverto äänikortissa nykyään on, eli samanaikaisesti soivia kanavia ilman data mixsausta.

--

Grez [08.07.2015 13:09:05]

#

TuomasK kirjoitti:

Eikös tuolla javan dokumenteissa sanota ihan selvästi että channels on "The number of audio channels in this format (1 for mono, 2 for stereo)", eli siis kertoo kanavien lukumäärän, ei mitään kaiuttimien numeroita.

Niin, sinänsä toi dokumentaatio on ristiriitainen kun toisessa kohdassa olisi viitteitä että useampikanavaistakin kun stereo tuettaisiin

http://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/AudioFormat.html:

channels - the number of channels (1 for mono, 2 for stereo, and so on)

TuomasK [08.07.2015 13:21:00]

#

Jaa, niinpä onkin. Pitäs olla useampi kanavainen systeemi että vois testata miten se toimii...

En ole itse kokeillut noita javan äänijuttuja, mutta minusta tuntuu että useampaa ääntä ei laiteta soimaan yhtäaikaa laittamalla ne eri kanaville (vasen, oikea, jne.). Eikös nämä kanavat tarkoita nyt niitä? Saatan olla kyllä väärässäkin.

Grez [08.07.2015 14:02:33]

#

Niin monikanavaäänissähän (2+1, 3+1, 5+1, 7+1, 7+2 yms) luonnollisesti kanavia on enemmän, mutta mielestäni kunnolliseen tukeen pitäisi olla enemmän informaatio kuin kanavien määrä tai sitten jossain pitäisi olla speksi joka kertoisi missä järjestyksessä kanavat allokoidaan, tyyliin
3 => 2+1, L, R, SW
4 => 3+1, L, R, M, SW
6 => 5+1, Lf, Rf, M, Lb, Rb, SW

(Tämä nyt siis oli vaan hihasta vedetty esimerkki)

TuomasK [08.07.2015 15:23:58]

#

Samaa mieltä.

Tarkennan vielä alkuperäiselle kysyjälle tuota aiempaa lausettani:

TuomasK kirjoitti:

eli siis (channels) kertoo kanavien lukumäärän, ei mitään kaiuttimien numeroita.

Tuo oli vähän oudosti sanottu, se sattoi sekoittaa asiaa lisää. Tuo luku siis kertoo, kuinka moneen eri kaiuttimeen ääntä toistetaan. Jos ääntä toistetaan esim. kanavalla 8, niin se kuuluu kaiuttimesta 8, mikä se sitten onkaan. Eli juuri niinkuin ei haluta tapahtuvan.

Minä itse tekisin tämän Clip:in avulla. Esimerkki pohjautuu koodiin osoiteesta http://stackoverflow.com/tags/javasound/info (En ole testannut toimiiko)

File efekti = new File("efekti.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream( efekti );
clip.open(ais);
clip.start();

Metabolix [08.07.2015 16:21:40]

#

TuomasK kirjoitti:

Tuo luku siis kertoo, kuinka moneen eri kaiuttimeen ääntä toistetaan.

Ei pidä paikkaansa. Kanavien määrä kertoo, kuinka monta erillistä äänikanavaa toistetaan. Järjestelmän asetuksista riippuu, mistä porteista tämä ääni sitten tulee – esimerkiksi tuleeko stereo vain edestä vai myös takaa jne. (Soivien kaiutinten määrä tietenkin riippuu kaiuttimista ja johdoista.)

Yksikanavainen ääni (mono) kuuluu lähes varmasti molemmista etukanavista ja ehkä myös muista kanavista, jos järjestelmä on niin säädetty. Kahden kanavan ääni (stereo) kuuluu yleensä etukaiuttimista mutta ehkä lisäksi takakaiuttimista, ja siitä voidaan myös miksata automaattisesti 5.1-äänen keskikaiuttimelle jotain.

Jos on välttämättä pakko soittaa ääntä tasan yhdestä tai kahdesta kaiuttimesta, luultavasti tämä onnistuu varmimmin niin, että valitaan mahdollisimman monen kanavan formaatti ja toistetaan ylimääräisistä kanavista tyhjää. Näin on selvää, että osa kanavista halutaan hiljaisiksi.

Jos tarkoitus on soittaa mono- tai stereoefektejä, viisainta on soittaa ne silloin yksi- tai kaksikanavaisena äänenä. Järjestelmä sitten päättää (käyttäjän toiveiden mukaan), mistä ääni tulee ja tehdäänkö siitä jotain myös käyttämättömiin kanaviin.

HannuTapion kannattaa muistaa myös, että ylimääräiset kanavat usein lisäävät prosessorin kuormitusta. Mono ja stereo ovat turvallisimmat äänet, jos ei muuta tarvita.

TuomasK [08.07.2015 16:35:12]

#

Eikös se ole käytännössä ainakin melkein sama asia ;) Tarkoitin kuitenkin, että jos halutaan toistaa monta ääntä yhtäaikaa, sitä ei tehdä käyttämällä montaa kanavaa. Vai olenko minä tässäkin taas ihan väärässä?

Metabolix [08.07.2015 16:53:01]

#

Aivan, nämä ovat ulostulokanavia, eivät miksattavia ääniä. Javassa ei (kai vieläkään?) ole mikseriä, vaan useamman äänen miksaaminen täytyy tehdä itse.

Kaiuttimista puhuminen on kuitenkin harhaanjohtavaa. Mono ei soita ääntä yhdestä kaiuttimesta, vaan mono soittaa yhtä äänikanavaa eli samaa ääntä mahdollisesti jopa kaikista järjestelmän kaiuttimista.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta