Well, about the former questions (unanswered 😳 )…I fortunately figured out how to use 5.1ch streaming. So anyway I don’t actually need an answer now. But I’ve just found a strange behavior of the Audigy soundcard in fmod. I have 2 soundcards(3 including on-board sound chip) which are Prodigy 7.1(Egosys) and SB Audigy2 ZS.
I was just playing around with the ‘record’ example, to enable 3D positioning of the microphone input(mono of course). That way I could make the input from the mic sound anywhere I’d like it to. I made a dialog box using VC++6 with some buttons on it which make the input sound move everywhere in 3D space.
I used Audigy(DirectSound) as the output driver and tried both input drivers – Prodigy and Audigy. What happened was : when I used Prodigy 7.1 as the input driver I could hear the full-duplex sound playing with 3D positioning applied. But when I used Audigy as input I couldn’t hear anything.
What I’ve found out so far is that Audigy input driver worked alright with the original ‘record’ sample program(not with 3D positioning but I could hear the full-duplex sound). And when I ran my own work, with the ‘mic in’ checked on Audigy mixing console(which should be muted usually, not to actually monitor the input directly), I could hear the mic input(it’s not through the program but just a direct monitoring of whatever goes to the soundcard, though). Another strange thing was that I could even apply EAX parameters in my program(I enabled that feature also while coding) to that ‘direct’ monitored sound. This was not working with the Prodigy input driver, so I got confused.
As I didn’t have any problem running my app with Prodigy input driver, I can hardly think I missed anything important, but here’s what I did. There was little more to do in coding, you know:
FSOUND_SetOutput(FSOUND_OUTPUT_XXXX); //I mainly use DSOUND
FSOUND_SetDriver(/whatever is displayed…I used Audigy driver/);
FSOUND_Init(44100, 32, 0);
FSOUND_Record_SetDriver(/whatever is displayed…I used Audigy driver here, too/);
sampRec = FSOUND_Sample_Alloc(FSOUND_UNMANAGED, RECORDLEN, FSOUND_MONO|FSOUND_16BITS , RECORDRATE, 255, 128, 255);
/*and when I press ‘start recording’ button */
channel2 = FSOUND_PlaySoundEx(FSOUND_FREE, sampRec, NULL, FALSE);
and then I called a thread to do the frequency changing stuff, as seen in the ‘record’ example. Did I miss anything, code anything wrong, or is this some special kind of behavior of Audigy’s input driver…? Hope I explained all these happenings understandably. Please give me some hints if you could. Thanks.
- geewoo asked 14 years ago
Thank you for the quick reply. I’ve just run the program again so that I can tell you more in detail.
Actually my application has 2 kinds of sources : a ready-made file(.wav, .mp3, or .ogg) and a microphone input. I assigned channel 1 for file playing, and channel 2 for the full-duplex mic playback. So basically I can hear 2 sounds(?-strange term, but anyway) at the same time. I also made some buttons which you can click to move each object(the playing file, the listener, and the mic input). Another thing I wanted to see was if EAX presets are applicable while recording, so I added another feature which checks if the output driver is capable of EAX, just like what’s in the sample code :
unsigned int caps = 0;
int drvtest = FSOUND_GetDriver();
if((caps & FSOUND_CAPS_EAX2) || (caps & FSOUND_CAPS_EAX3)) ……
In both cases I used DirectSound as the output, so I thought this might allow me to change the presets using stuff like this:
FSOUND_REVERB_PROPERTIES props = FSOUND_PRESET_PSYCHOTIC;
Now I should write how it worked in detail. In all the cases the output is SB Audigy 2 ZS/DirectSound.
File playing(mono .wav file)
I could apply 3D positioning, AND the EAX features(FSOUND_PRESET_CONCERTHALL, FSOUND_PRESET_PSYCHOTIC, and all that good stuff…).
(1) Prodigy 7.1 as the input driver
- 3D positioning worked, but EAX didn’t work on mic input, that is, it was applied on the .wav file playing at the same time.
(2) SB Audigy 2 ZS as the input driver
– No problem on the .wav file playing(as mentioned on 1). But no sound from the recording channel. I had to enable Microphone on the playback control(in the mixer window of my Win XP’s control panel) to hear the sound. And in this case there was no latency because, I think, this was not the processed sound but just direct monitoring. When I changed the EAX properties, though, it worked…This was the strange part.
FSOUND_Update(); is called every time I change the position of any object e.g. when clicking X+ button of the listener.
Sorry again for the article getting longer than expected. Please let me know if anyone could think of possible reasons for this. Thank you.
Thanks again, now the EAX works fine.
sampRec = FSOUND_Sample_Alloc(FSOUND_UNMANAGED, RECORDLEN, FSOUND_MONO|FSOUND_16BITS|FSOUND_HW3D , RECORDRATE, 255, 128, 255);
Actually I was concentrating on making the 3D positioning work with Audigy input, so I thought I would need to find something more to know.
Now that EAX isn’t the problem, The only possibility left is that Audigy’s mic in might be stereo(which I’m not sure yet), and according to what I just re-read on the fmod document, configuring FSOUND_MONO in a stereo input cannot be applied(settings not overriden), so there is no sound moving. I was using a stereo microphone made by Sony, and Prodigy’s mic in was mono. If what I think is right that partly solves the problem, but it’s still not understandable why I couldn’t hear the full-duplex sound with the mic in disabled on audigy’s mixer. If this is on, it’s not the processed sound and I can hear it even before running my program.
Anyway, I bought some USB microphones and they work just all right. So I don’t have to use Audigy driver as the input right now. If I happen to find out the reason I’ll post later. Thank you for the help.
Well, sorry, maybe my English needs some more improvement…
What I was trying to do with my application was :
mono microphone input -> 3D positioning -> 5.1ch out.
AFAIK All I had to do was just adding up some features from the ‘record’, ‘3D’, and possibly ‘multiple'(to use more than 1 microphones simultaneously) samples.
The cases I tested are as follows:
Input Driver / Output Driver
Prodigy 7.1 / SB Audigy 2 ZS
In this configuration, the sound positioning was fine(moving as I expected), but changing EAX presets didn’t work.
Input Driver / Output Driver
SB Audigy 2 ZS / SB Audigy 2 ZS
No movement here(though I changed the positions). But strangely EAX feature worked.
What would suggest as a possible story behind this…? My future plan is using 4 usb microphones as input devices and 1 soundcard as output, so any help would be appreciated.
Please login first to submit.