ÚrIsten-Mennyország, hát az eddigi kísérleteim pont erre vezetnének rá !!! :
Egész egyszerûen képzeletben a bájt értékeit 0 és 255 helyett -127 és +127 közé kell vennem, és utána szimplán az azonos helyzetû bájtokat, mint mintavételi pontokat össze kéne adnom, majd utána kivonnom mindegyiknél a kapott bájtértékbõl 127-et. Túlmintavételezés ellen pedig gondolom a fentit egyszer levezetem, de akkor nem írom ki az értékeket bájtként, csak megnézem, hogy melyik érték a legeslegnagyobb a sok millió közül, megnézem, hogy az hányszor van meg 256-ban, majd annak veszem a felét, és mind a két forráshangfájl mintavételi értékeit (amiket -127 és +127 közé esõnek tekintek (tehát bájt-127) ismét) osztom ezzel a számmal, majd a halkított hangfájlok mintapontjait adogatom össze.
Jól mondom?
Most gyorsan meg is néztem Audacity-ben, hogy összeadtam egy mono sávot natúr 4 sec.-os 55 Hz-s szinuszhullámmal, meg egy ugyanilyet 880 Hz-s szinuszhullámmal és látszólag tökre ez történt. (!)
Az alapoktól nem valószínû, hogy meg tudnám írni, mivel épp hogy az "összeadást" nem tudnám hullámtanilag/matematikailag levezetni, úgyhogy majd végignézem a linkeket.
Ha az alapoktól akarod megírni: - A WAV állomány elsõ 44 bájtja tartalmazza a fejlécet, amiben benne van a mintavételezés, a bitmélység, és a csatornák száma. Reméljük, hogy a két összeadandó állomány azonos paraméterekkel rendelkezik. - Ezeket az állományokat beolvasod egy-egy (dinamikus) tömbbe - az állományok bitmélysége határozza meg a tömb elemének típusát. - Hogy a végleges állománynál ne legyen túlvezérlés, meg kell nézni a két tömb összegének maximumát. Ha a két tömb összegének maximuma nagyobb mint a bitmélység által adott tartomány, akkor mind a két hang hangerejét egyenlõ mértékben le kell csökkenteni.
"Mit csinálna az említett segédprogram hogy külön programot írsz rá?" - Azt inkább majd akkor teszem publikussá, amikor majd magát a programot is felteszem. Igazából egyszerû dolgokról lenne benne szó, így majd elõfordulhat, hogy már van ilyen, de hát azért reménykedem, hogy én leszek az elsõ.
"Miért nem használsz erre a célra már meglevõ hangszerkesztõ programot - például Audacity vagy WavoSaur?" - Mint már mondtam, összefüggésben lenne a feladat más programrészletek munkájával, a felhasználó pedig nem nagyon örülne neki, hogyha külön kéne telepíteni az audacity-t azért az egy feladatért s a távvezérlés talán még macerásabb is lenne.
"Programozási nyelv? Operációs rendszer? Elegendõ parancssoros program vagy grafikus felület is kell?" - Programozási nyelvnek a legjobban C#-nak örülnék, mivel abban kezdtem el a többit, de nem hiszem hogy ott kivitelezni lehet ezt a feladatot, vagy csak macerásan (hogyha meg lehet oldani ezt bájtérték-számolásokkal, akkor talán C#-ban is lehet). - Jó lenne, ha Win32-ben tudnám folytatni, mivel csak az van. (A Linux videodrivere egyszer kisütötte a videókártyámat, úgyhogy azt nem szeretem) - A konzolos simán szóba jöhet, amit eddig csináltam az úgyis az...
"Valós idõben szeretnéd a két jel összeadását (például két bemenõ jelet a vonalkimenetre küldeni), vagy két hangállományról (ez esetben elegendõ szimpla WAV, vagy használsz valamilyen tömörítést is) van szó? Ugyanaz a bitmélység, mintavételezési ráta?" - Nem, nem valós idõben, azt maximum majd megcsinálják mások, hogyha tetszene nekik a dolog (szerintem jól lehetne az elgondolásomat pl. rádiósugárzás titkosítására használni, de ebbe most ne menjünk bele). Itt szimpla WAV-okról van szó, teljesen tömörítéstõl mentes WAV-okról. Gondolom könnyebb lenne az, ha a bittmélység és a mintavételezési ráta ugyanaz lenne, erre úgyis van jól bevált standard (44100 ; 16), úgyhogy ez már a felhasználó toleranciája.
Tehát mondjuk van két db sztereó sávos hanganyag, és ezeket bármiféle tartalom/bitráta/lejátszási paraméterek módosítása nélkül egyetlen sztereó sávra veszem és azt a merevlemezre írom. Ugyanez két külön, mono sávos hangmintánál egyetlen mono sávot eredményezne. Így persze a két eredeti hangminta a végeredményben szétválaszthatatlan, de ez nem jelent gondot, én direkt egyetlen kimenõ sávot (sztereó/monó) akarnék.
Pár kérdés bennem is felmerült: - Mit csinálna az említett segédprogram hogy külön programot írsz rá? - Miért nem használsz erre a célra már meglevõ hangszerkesztõ programot - például Audacity vagy WavoSaur? - Programozási nyelv? Operációs rendszer? Elegendõ parancssoros program vagy grafikus felület is kell? - Valós idõben szeretnéd a két jel összeadását (például két bemenõ jelet a vonalkimenetre küldeni), vagy két hangállományról (ez esetben elegendõ szimpla WAV, vagy használsz valamilyen tömörítést is) van szó? Ugyanaz a bitmélység, mintavételezési ráta?
Van egy program LMMS (Linux multimedia Studio) annak van forráskódja, letöltöd, kielemzed és örülsz.Legközelebb mondjuk ide írj minek egy új topikot nyitni.Ha esetleg felakarod használni a forráskódot(és publikussá teszed a projekted) akkor a GNU liszensz alapján teheted.
Helló, nem tudna valaki (programozásban jártas) esetleg valami leírást adni arra, hogy hogyan lehetne nekilátni egy olyan program írásának, ami két hangsávot tudna összemixelni. Tehát hogy mondjuk két sztereósávos zenét tesz egyetlen sztereó sávba a két hanganyag tartalmi módosítása nélkül. Hangszerkesztõ programok írására rákerestem a Google-on, de ott csak már kész hangszerkesztõ programok jönnek be. Azért lenne egy ilyen kódra szükségem, mert csinálnék egy segédprogramot magamnak s szükségem lenne egy ilyen részre belõle.
Megköszönném ha segítenétek! Esetleg utána cserébe megosztom azt amivel készülök