|
|||||||
![]() |
|
|
LinkBack | Thread Tools |
|
|
#1 |
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
crossfeed dsp plugin?
Hi!
This is partially question and another part request, cos I know the answer ![]() So is there dsp plugin for Headphone crossfeed, or can I do it right with current stuff? I have allready mixed channels like this: http://kotisivu.mtv3.fi/aw_k/dsp.gif Wheres pans are set to 50/50, and crossing channels cut down to 33% in mono mixes. Problem is that thats not all, there should be ~0.3 ms timeshift in crossover signal. Delay should be lower at higher frequences to prevent shadowing effect. Allso some frequency shaping ( cutting down lower frequences of crossover signals ) for good acoustic effect might be required... EDIT: Here's an guide to DIY device for correct crossfeeding with some theory, for those who are interested EDIT2: Another good link. Search for a "The Psychoacoustics of Headphone Listening" Dsp coders, here's you're next challenge ....which reminds me - is there any tutorial / document to dsp-coding? I thought that maybe I could make simple timeshifter, even that's better than nothing.
Last edited by wilho; Jun 7, 2003 at 07:10 AM. |
|
|
|
|
|
#2 |
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
Re: crossfeed dsp plugin?
double, sorry
|
|
|
|
|
|
#3 |
|
DriverHeaven Lover
Join Date: Feb 2003
Posts: 210
Rep Power: 0 ![]() |
If I understand it all correctly, you want to mix left with right for some 33%, and have 3 ms delay on that line..?
you can fiddle around a bit with the sourounder plugin, and mix the rear channels with the front channels, crossed. The rear channels in the surounder have a settable delay (or actually the front channels) Maybe, the surounder, even has a workable preset allready, if not, then this would be a great addition I think. |
|
|
|
|
|
#4 |
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
You understood just right. Thanks for a hint.
I'm not quite sure that I found all possible use of surrounder, but it seems to me that what it does is that it adds timeshifted and original signal to rear output. That's at least better than nothing, but not exactly what I need - which is crossfeeding the timeshifted signal only. And of course, there's still that frequency-related amount-of-delay still missing. Damn portable headphones, allways runs out of battery... I'll have to take a charging brake to experimenting... |
|
|
|
|
|
#5 |
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
If, someone is interested to try this out, I got some decent results with chain crossing-channels -> delay (found in this thread) 1% of .5S = 0.5ms -> lowpass -filter -> and finally stereo-mixing 100%orig/40%crossed-channels.
I had to do that lowpass-filtering, becouse slightly delayed voice with original creates harshness or somekind of ringing in high frequences (shadowing effect). Last edited by wilho; Jun 11, 2003 at 02:37 AM. |
|
|
|
|
|
#6 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
I hope I have the working version of such plugin for EAX/DirectSound3D spatialization stuff as soon as I start coding spatialization
![]() /E |
|
|
|
|
|
#7 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
>> When do you start coding
hmm.. I'm unsure ![]() anyway, a working plugin would be a good contribution from the kX Community ![]() so, you (or anybody else) can start coding the plugin right now ![]() /E |
|
|
|
|
|
#8 | ||
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
Quote:
Quote:
|
||
|
|
|
|
|
#9 |
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
Man, you just became my personal hero
. I'll let you know how it worked for me when I get home from work.edit: Not bad at all, It passed even my ultimate test - quakeworld DM challenge; Ihave listened those explosions countless of hours, so It's quite easy to notice littlebit smaller differences too Might be that It's even better without that highpassfilter - It can be done with separate plugin anyway, and there's allways that lack of gprs's, and results are pretty good without it too.This is quite much what I was looking for. Thanks. Last edited by wilho; Jul 17, 2003 at 11:25 AM. |
|
|
|
|
|
#10 | |||||
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
Quote:
It's definitely good thing to have. Quote:
Hmm, with kxl-version and gui - how would you describe it - I wouldn't have to ask. There's lot of good .da sources floating around boards...somebody should collect them, and if needed, compile them as 'real' plugin with gui, and put them available. Would it be quite easy, because you can export to C from .da with kxEditor, and there's that kx-sdk available? Eyagos, your page, translate it in english as you said somewhere! Quote:
Quote:
Quote:
Well, nobody else is listening my mixes, so it won't matter don't you think
|
|||||
|
|
|
|
|
#11 |
|
DriverHeaven Junior Member
Join Date: Jan 2003
Posts: 48
Rep Power: 0 ![]() |
Came back to this thread, and all LeMury's messages have been disappeared!!? ...well, here's his code again, if somebody is interested. ;--------------------------------------------------- name "Xfeed"; copyright "By LeMury 2003"; engine "kX"; created "07-19-2003"; comment "Headphones Crossfeed Filter"; guid "c7c0735d-ab70-4dd1-b743-d658b8c210f7"; ;registers input inl, inr output suml, sumr control Hipass=0.5 control Lopass=0.5 control X-Mix=0.5 static tl1=0x0, tl2=0x0, hl2=0x0 static tr1=0x0, tr2=0x0, hr2=0x0 temp tmp, tmpl, tmpr, f ;code macs tmpl, inl, 0, 0 macs tmpr, inr, 0, 0 exp f, Lopass, 0x7, 0x0 macsn tmp, tmpl, tl1, 1 macs tl1, tl1, tmp, f macsn tmp, tmpr, tr1, 1 macs tr1, tr1, tmp, f exp f, hipass, 0x7, 0x0 macsn hl2, tl1, tl2, 1 macs tl2, tl2, hl2, f macsn hr2, tr1, tr2, 1 macs tr2, tr2, hr2, f macs suml, tmpl, hr2, x-mix macs sumr, tmpr, hl2, x-mix end; ;--------------------------------------------------------- |
|
|
|
|
|
#12 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
Yes I did remove all my posts.
Sorry about that, see; http://www.driverheaven.net/showthre...040#post178040 Regards, /Lemury |
|
|
|
|
|
#13 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
Hi Eugene,
As promised here is the 'Headphone Speakersim' stuff again. I first add some simple backgound info for other ppl who just 'tuned in' ok? The original intention(purpose) of this plugin was to get rid of the 'stringent' Left/Right stereo field common in auditing stereo music over Headphones. When auditing over a 2 speakers stereo system, there is always 'crosstalk'. I.e. left ear always hears a 'portion' of the Right speaker and vica versa. That 'portion' is not simply an attenuated copy of it's original. According to research in 3D positional audio, that crosstalk portion is attenuated, colorized and delayed/phaseshifted. These phenomenas are reconstructed in so called 'head-related transfer functions' (HRTFs). So far for the theorie. Ppl can check the various 3D links for in-depth info. Back to the plugin: For simplicity sake we leave out Room accoustics, coming close to 'Near Field Monitoring' over speakers which also (tries) to rule out room accoustics. We take a 'copy' of the Left input, cut some high freq, delay it and feed/mix some to the Right output. Same for the Right input. Hence,..Crosstalk (CrossFeed..duh) **So basicly we are just 'narrowing' the stereo field in certain freq bands** I.e. mimicing Near Field monitor speakers over Headphones. To make the 'Crosstalk' signal I used a very simple LowPass IIR filter; // c = 0..1 (1 = passes all, 0 = passes nothing) // output(t) = output(t-1) + c*[input(t)-output(t-1)] // out_new =old_out + c*(in_new - old_out) // out = t1 + c*( in - t1) IIR filters act like analog filters and in this case gives the desired delay of ~0.3msec, and ,of course, cuts high frequencies in the Crosstalk signal. This is a very 'Experimental' plugin! (A toy if you wish) I also added a HighPass to cut lows and a control to 'flip' the Crosstalk signal phase 180 degrees. One can mess with the stereo field. Either 'Narrowing' or 'Widening' it. In extreme settings it can act as a 'Vocal Remover' ![]() (this works bad with some mp3s, because of the mp3 compressing algo's etc) (use it on a good stereo source and hear stuff normally 'masked' by other stuff in a mix. )Playing around with this thingie also proofs that high freq determine stereo position much more than lower freq. For it's intentional purpose however, it should be set to a very subtile Crossfeed. For ppl who actually want to use this plugin; -keep in mind that the Lopass and Hipass sliders set the cutoff points! -XPhase at 0 = Inverted, 100 = NOT Inverted -Dry_Wet at 0 = All dry, 100 = All wet (set to 100 to hear the crosstalk signal only) Here is a freq response plot of various filter settings (same for LP): http://members.home.nl/nahutec/kxplu...pass_graph.jpg (I've put in an exponential filter control to get a 'human' control) Here is the documented dsp code for all you 'code lurkers'.. ![]() Or DL it here: http://members.home.nl/nahutec/kxplugins/crossfeed.da ;crossfeed.da ;--------------------------------------------------------- name "Crossfeed"; copyright "By LeMury 2003"; engine "kX"; created "08/23/2003"; comment "Headphones Crossfeed/Vocal Remover"; guid "6fa996e3-857e-4456-9865-a6cf624fc349"; input inl, inr ; output outl, outr ; control Lopass=1 ; lopass cuttoff freq control Hipass=0 ; hipass cuttoff freq control XPhase=1 ; xfeed phase 'select' control Dry_Wet=0.5 ; direct/xfeed mix static tl1=0x0 static tl2=0x0, hl2=0x0 static tr1=0x0 static tr2=0x0, hr2=0x0 temp tmp, tmpl, tmpr, f ; read inputs macs tmpl, inl, 0, 0 ; get L dry sample macs tmpr, inr, 0, 0 ; get R dry sample exp f, Lopass, 0x7, 0x0 ; exp scale lp filter coef ; left lopass macsn tmp, tmpl, tl1, 1 ; macs tl1, tl1, tmp, f ; (tl1 is lp out) ; right lopass macsn tmp, tmpr, tr1, 1 ; macs tr1, tr1, tmp, f ; (tr1 is lp out) ; feed lopass output into hipass exp f, Hipass, 0x7, 0x0 ; exp scale hp filter coef ; left hipass macsn hl2, tl1, tl2, 1 ; tl1 is input to hp macs tl2, tl2, hl2, f ; (hl2 is hp out) ; right hipass macsn hr2, tr1, tr2, 1 ; tr1 is input to hp macs tr2, tr2, hr2, f ; (hr2 is hp out) ; make inverted xfeed signals macsn f, 0, hr2, 1 macsn tmp, 0, hl2, 1 ; pan/'select' between normal and inverted xfeed signal interp hr2, f, XPhase, hr2 interp hl2, tmp, XPhase, hl2 ; pan/mix between dry and crossfeed sigal, output interp outl, tmpl, dry_wet, hr2 interp outr, tmpr, dry_wet, hl2 ;----------------------------------------------------------------- end; Eugene, Allthough 3D HRTFs related, this stuff is more 'basic Binaural 2D' as I see it. Anyway, maybe it's usefull to your research in some way. Apart from that, if any (user) interest, I can dll it for UI stuff etc. Regards, /LeMury Last edited by LeMury; Aug 31, 2003 at 02:01 PM. |
|
|
|
|
|
#14 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
thanks -- I'll try it
![]() btw, concerning the 'best speaker simulation': do you have WinDVD installed? it has an option to output to 'headphones' in this mode it uses either 'Dolby Headphones' or 'SRS Headphones' algorithms these algorithms emulate 'room experience' (and have a slider 'room size': small, medium, large) the '5.1' input (well, '5.0') is placed in this virtual room that is, the desired effect should have 5( 6 ) inputs (center, left/right, surround left/right, rear center) and should create a virtual room experience (to be experienced with headphones) the algorithm is really a kind of HRTF with phase / delay / colorization... similar algorithms were created by Creative ('Headphones' mode), Sensaura and QSound a possible place for this effect in the present kX DSP layout: a preset for the Surrounder effect and, btw, without a crosstalk, such effect [could] produce a more 3-D-like surround for 2-speaker configuration so, the goal is to reproduce Dolby/Sensaura/QSound-like surround effect: including both 'virtual speakers' (5->2 stereo) and 'virtual room' (5->headphones) I understand that this is not an easy task -- moreover, a real surround effect might require some scientific researches (with HRTF modeling ) -- and the usage for this effect will be limited for gaming (because I doubt any audio engineers use such effects for auditing their tracks...)please let me know if you have any ideas... /E p.s. present 'Surrounder' doesn't use any real 3-D algorithms but performs a generic ProLogic-like encoding (when 'surround' mode is on) |
|
|
|
|
|
#15 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
Eugene,
Let's see if I understand it right. -As I mentioned, the 'Crossfeed' plugin is for normal stereo 2 > 2 auditing over headphones. It just takes a 2 channel stereomix and mimics 'Near Field Monitoring' as used in a studio setup. Room accoustics are intentionally left out in those cases. I.e. no room reverberation at all. (of course, in practis this is never 100% the case) -Yep, I have treid those Headphone sims you mentioned, that emulate 'room experience'. For studio/music monitoring they all fail imho due to that 'room emulation' (amongst other things). In general, we don't want any room colorization in 'Near Field Monitoring' Sound engineers sit close at a fixed angle and at fixed distance to their Monitor speakers. (well, at least in small studio's they do.. )So we have to clearly distinghuis between 3D audio techniques/algos for gaming experience, DVD playback and such, and plain 'good old' 2 channel stereo audition. -If I understood you right, we (also) need a dsp plugin that does a good 3D > Stereo Headphones simulation. I.e. 3D hardware accelerated Surround, Dolby, EAX, etc. Game sound on Headphones, without having to use a Surround Speaker set. At the same time, one could test 3D programming/performance using headphones. If so, this is quite interesting since I'm looking for a good 3D Game sound on headphones solution for a long time now. I don't wanna use surround speakers. (Not pleasant for neighbours and family members.. )Let me know if I 'git' it right. Regards, /LeMury |
|
|
|
|
|
#16 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
hello
1. I think we should keep your 'crossfade' effect as a possible 'surrounder' preset -- for audio engineers and 'plain "good old" stereo audition' 2. yes, we definitely need a set of DSP effects for gaming / movie purposes: * headphones (emulates 5.1 room) * 2.0 (emulates 'virtual rear' and 'virtual center') * 4.0 (emulates 'virtual center') * 5.0 (emulates a 'room' experience -- not very important, but might produce a better 'cinema' effect) 3. we should also keep in mind two audio technologies: Dolby ProLogic encoding and decoding that is, the surrounder effect should be capable of processing the incoming stereo wave and 'expanding' it into 4.0/5.1, as well as process the incoming '5.1' data and encode it into 'stereo' (ProLogic) yes, the present Surrounder performs these tasks, but we should keep this functionality for gaming purposes, too probably, we should keep the '7.1' speaker configuration in mind, too (for future updates) /Eugene P.S. Surrounder currently handles passive ProLogic matrix. we should have a closer look at ProLogic ][... P.P.S. and, definitely, the 'headphones' effect will help us to develop better 3-D audio engine [especially for our neighbours and family members ]
|
|
|
|
|
|
#17 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
Hi Eugene,
Understood..! I've gathered info, White Papers, Docs, HRTF databases etc. etc. regarding current 3D/Surround/AC3 Dolby etc. audio standards/technologies. Indeed not easy, but quite intreging. Anyway; I have to finish other (promised) Kx-stuff first, before I can start on this. Regards, /LeMury |
|
|
|
|
|
#18 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
>> HRTF databases
you've got them? really? where? ![]() >> I have to finish other (promised) Kx-stuff first, before I can start on this that's ok and, by the way, there's one more task -- EAX reverb ![]() I'm currently working on the API front-end, but the actual reverb (probably based on Max's kXU one or CLEAX3Reverb) should be written, too so, there's always enough work for DSP Engineers and effect writers ![]() /E |
|
|
|
|
|
#19 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
>> HRTF databases
http://interface.cipic.ucdavis.edu/C...F_database.htm I haven't yet took a deeper look at it, so I can't say if it's usefull. Seems to be in Matlab format. /LeMury |
|
|
|
|
|
#20 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
a-ha! thanks for the link. I'm unsure if we will need the 180Mb databases...
btw, some links I've found useful: http://headwize2.powerpill.org/tech/sshd_tech.htm (also a lot of info here: http://headwize2.powerpill.org/tech/index.htm) it seems that the dolby headphone technology isn't listener-specific (at least, it is not so ear size-dependent) /Eugene |
|
|
|
|
|
#21 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
>> I'm unsure if we will need the 180Mb databases...
No,...at least not in praktise. But I DL-ed it anyway to have some reference. Yet more scienetific links: http://www.mat.ucsb.edu/240/C/ >>it seems that the dolby headphone technology isn't listener-specific >>(at least, it is not so ear size-dependent) Yeah, they use a 'single universal HRTF setting'. (whatever that may be) Hmm...I guess it's some average of common HRTFs. In PowerDvD there is also a "Dolby virtualizer", (probably the same you mentioned in WinDvD) Well, it sounds like a normal Room Reverb with some phase inverting to me. I wonder if it's the same technology as "Dolby's Headphone": http://www.dolby.com/dolbyheadphone/ I hope not.. ![]() Thanks for the Headwize links. Good and usefull reading stuff. Can't wait to start on this. (duh...I wish I had an extra 'lifetime' to do all the things I want to do.. ..)/LeMury |
|
|
|
|
|
#22 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
>> Headwize
yep, a very good source of information -- lots of articles ---------- after browsing the Net (including the dolby.com site etc..) I finally created a prelimenary specification for the "kX Surrounder+" effect: ( )input: 2 stereo + 7.1 content (10 ins) output: up to 7.1 (8 outs) internal routing: stereo -> [expansion: Surround/ProLogic, ProLogic II, ProLogic IIx?] -> mixer 5.1 / 7.1 content -> [expansion: a-la DolbyDigital EX] -> mixer expansion is optional and can be turned on and off (that is, at least two switches: 'Decode Surround / Movie mode' and 'Decode 6.1/7.1 Surround') the decoder is obviously applicable only when playing back any stereo sources with encoded information (such as a stereo TV in, an AVI file with generic movie sound track, an audio CD with DolbySurround/ProLogic track) the expansion is not related to AC-3 stuff at all ![]() the expanded signal is mixed with '5.1/7.1 content', thus, enabling further processing (e.g. dolby surround encoding )the mixer has the following output options: 1. prologic II encoder (compatible with prologic 1 and dolby surround by design) --> two stereo channels - to be connected to external decoders, HiFi systems or to be recorded (we might have problems with prologic ][ since its encoding/decoding algorithm is somewhat complicated and not fully described) 2. headphones: - [hrtf]: a-la dolby headphones with 2-3 different room settings --> two stereo channels the reverberation algorithm might be shared with our Reverb effect (that is, probably an EAX3 reverb should be used) sub-settings: '5.1', 'stereo', 'monitoring' (the last one is used to simulate audio monitors) sub-settings select the preferred HRTF algorithm and depend on source signal type (movies/games or stereo tracks) 3. speakers: [virtual] - 2.0/2.1 - 3.0/3.1 - 4.0/4.1 - 5.0/5.1 - 6.0/6.1 - 7.0/7.1 ![]() for any non-5.1 setting, an HRTF algorithm similar to dolby virtual speaker is used speaker settings: - 'direct' (any sound data sent to non-existent channels is lost) -- no downmixing is performed - 'downmix' (simple mix: center->left&right; rear->front -- depending on speaker config) - 'copy' (rear=front) - 'surround' (hrtf-based with virtual speakers) bass options: LFE channel has 3 main options (the way it is currently implemented): - 'use physical LFE channel' (if inactive, the LFE stream is mixed with Left & Right channels) - 'redirect bass' (if active, the Left & Right stream is filtered and LFE information is extracted and mixed with the direct LFE stream) - separation frequency ---- the dolby prologic 2 decoder has (per specs) two options: 'music' and 'movie' and three controls: 'center width', 'panorama', 'dimension' ---- we could probably investigate the ways Creative implemented similar effects for 10kx-cards (no reverse-engineering, of course )kxctrl -mx <dll name> will do the trick ---- trademark / copyright issue: we won't use any registered trademarks, so, for our purposes, all prologic/surround stuff should be called 'Surround' ('Surround encoding' / 'Surround decoding') we should also invent a good term for "virtual speaker" and "hrtf-based headphones" ![]() /E |
|
|
|
|
|
#23 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
[almost forgot]:
the code for the effect will be generated on-the-fly depending on the options currently active I will implement a function similar to 'update_microcode' and will add it to the SDK (as well as enable this functionality for the kX Dane editor) probably, it would be nice to implement a dynamically generated C-like syntax for Dane, too (DynamicDane) (something similar to the present prolog/epilog code, but much more programmer-friendly) for instance, here's a [possible] C++ code void generate_surrounder(int pgm_id) { KXDynamicDane d; d.begin(); d.guid("2b8b7fa8-98b9-4f6e-81a0-400d3ba39c6f"); d.name("Surrounder+"); d.declare_input("left"); d.declare_input("right"); if(user_option&DECODE_SURROUND) { d.declare(temp,"tmp"); d.MACS("left",.....); d.MACINTS(...); } ... if(user_option&ENCODE_SURROUND) { d.declare_static("delay"); d.MACINTS(...); } ... d.update_microcode(pgm_id); } --------- /Eugene |
|
|
|
|
|
#24 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
Pffffeeeww,....You have been quite busy
![]() I have to properly 'digest' all this firts.., but it sounds great and ok! (especialy the [almost forgot] part.. )I have just started on a real "headphones virtualizer" a'la Dolby/WinDvD/Creative. Looks promising so far. To me this is vital because I need some means to hear a decent Surround/5.1 sound representation over headphones for 3d development purposes. Sure, I could buy a surr.speaker set, but that won't work at night , besides that, I like the 'isolation'when programming, thinking and uhh...drinking )I'll keep you posted. /LeMury |
|
|
|
|
|
#25 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
Considerations on how to simulate 'Surround Speaker Sound' on a Headphone
Eugene, Max, The direct use of HRTF data is, although the "best" approach, very hard to implement in general, and in 10kx particulair. It would require convolution between the HRTF's impulse response (HRIR) data and the input data stream. I have no idea how this could be done in 10Kx. An alternative way is to 'modell' a HRTF rather then using a fixed HRTF data set. (Creative's Headphone virtualizer also uses this approach as far as I could tell from the code) After studying several docs here; http://interface.cipic.ucdavis.edu/C...blications.htm it appears that PRTFs (Pinna Related Transfer Function) almost only gives Elevation clues and hardly any Azimuth clues. Correct me if I'm wrong, but when listening to, let's say a 5.1 surround speaker set, one does NOT get different Elevation clues from the speakers itself. Only Azimuth. I.e. if a fixed test signal is output in sequence (surround panned) to the speakers, one only gets different (changing) Azimuth clues. The elevation remains the same. (speaker hight placement) If there are any elevation clues, then they must already have been recorded in the audio signal. Please comment on this observation! So, If this is true, then a lot of HRTF data can be ignored, namely the elevation data and the PRTF part. This could simplify implementation drasticly. Good results seems to be possible with using only: -IID / ILD (Interaural Intensity/Level Difference) = sound pressure -ITD (Interaural Time Difference) = frequency dependant delay -Head Shadow (causing ITD) = Low pass filtering Of course this approach has it's drawbacks. It could work fine in the Horizontal Front Range, but it would be hard to make a good 'Back' perception. I have made several Freq. response plots from Kemar HRTFs at 'Back' Azimuth. Hope I can derive some function from it. Also; in order to get an 'Out of head' perception, some form of Room reverb must be applied. But this would also be the case with the direct HRTF approach. Suggestions/comments are welcome, /LeMury Last edited by LeMury; Sep 14, 2003 at 02:43 AM. |
|
|
|
|
|
#26 | |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
>> An alternative way is to 'model' a HRTF rather then using a fixed HRTF data set.
[one possible approach]: imagine we have 5 virtual speakers each position is given, including elevation so, we have 5 3-D sources, azimuths, distance and so on now we simply process the 5 incoming streams with 5 parametric equalizers ![]() (each equalizer has its own parameters that are related to =constant= speaker position) this won't emulate the real 3-D, but will at least emulate '5.1 speaker set' ![]() of course, the parameters for the equalizer can be simplified (thus giving the curves that are close to the given HRTF data) note that the effect should have 8 inputs (corresponding to all the 8 directions: n,nw,w,sw,s,se,e,ne) this is also true for the 'surrounder +' effect itself (+ one additional 'LFE' input and two 'stereo' inputs ==> 11 inputs )[some thoughts]: the above scheme doesn't deal with 3-D source 'elevations' (only with speaker elevations) this is not 100% correct the elevation is 'emulated' by creative drivers by using a separate input with a custom filter applied that is, if the source is elevated, its 3-D position components (5 or 8) are decreased, while the 9th component is increased this seems to be a good idea so, the final 'Surrounder+' might have 12 inputs ![]() -=-=-= note that the elevation and spatialization is calculated by the driver, not by the DSP code the DSP code receives a set of [already distributed in the space] waves that correspond to an 'ideal 8-channel speaker-set' -=-=-=- Quote:
so, we have 8 different [pre-calculated!] parameters for each 'virtual' speaker [and these can be configured via a custom user-friendly application ]these parameters include: * level / attenuation * left/right delay * filter curve (it depends on the azimuth and elevation angles) of course, I doubt we will need 8 different filters -- we will need to optimize a little ![]() -=-=-=- "room reverb" - yes, of course however, at the moment I suggest we don't include this part of the code in the Surrounder+ effect /E |
|
|
|
|
|
|
#27 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
further reading
yes, I know it is not the main task at the moment
however, here's a good link:http://www-ccrma.stanford.edu/~jos/w...rberation.html the FDN-based reverberation is used by Creative Labs moreover, they have some patents assigned (e.g. us6188769 and the 'inventor' is said to be Jot! -- can be downloaded from our site) there's also some info about spatialized reverberation, as well as lots of pages dealing with different filters and DSP (http://www-ccrma.stanford.edu/~jos/waveguide/ and http://www-ccrma.stanford.edu/~jos/filters/Index.html) moreover, the site has an open-source audio processing library written in C (http://www-ccrma.stanford.edu/software/stk/) /E |
|
|
|
|
|
#28 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
|
|
|
|
|
#29 |
|
DH Senior Member
Join Date: Jan 2003
Location: The Netherlands
Posts: 1,884
Rep Power: 48 ![]() ![]() ![]() ![]() |
1. Great,..more reading stuff....
![]() No,..j/k. Great info + SDK. 2. I'll buy a second Audigy tommorow for the PC I'm programming on, (don't wanna run up & down from my working room to my studio all the time), then I will check out your '3dsetup' and get back to you. /LeMury |
|
|
|
|
|
#30 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
btw, the headphone effect might be used with live, too -- but it uses =too= many resources...
and please check the two 'unused' inputs of the HpSp effect -- I wonder what they might be used for... /E |
|
|
|
![]() |
| Bookmarks |
| Thread Tools | |
|
|