Creative SBZ ASIO

#1

When using a Creative SoundBlaster Z Series card, FMOD Designer can use the ASIO output mode, but FMOD Studio fails.
In the Audio Preferences when selecting the ASIO output device (Creative SBZ Series ASIO) the following message appears:
“Unable to initialize the selected device. No sound will be produced. Please select another configuration.”
Any ideas why this used to work but doesn’t in the latest version?

0 Likes

#2

Hi Alain,

When you are trying to initialize ASIO with FMOD Studio, please ensure no other software is using the same ASIO output. This can be a DAW, FMOD Designer, or another FMOD Studio project that is open.

Let me know if you’re still having trouble initializing your audio device.

Thanks,
Richard

1 Like

#3

Hi Richard,

Thanks for getting back to me.

There’s no other software using the ASIO device, as evidenced by it working with FMOD Designer and the FMOD Designer API.

There are also other ASIO devices on the system which do not suffer this problem (such as an M-Audio Super DAC).

I’ve tried disabling all other audio devices except the SoundBlaster Z but the problem still occurs.

Also this problem is not limited to a single system, it was first noticed by a customer and has been replicated on every Win10 PC we’ve tried that has a Soundblaster Z.

Presumably FMOD Studio should work just fine with the SoundBlaster Z ASIO, just like FMOD Designer does (did)?

Thanks,

Alain

0 Likes

#4

Hi Alain,

Could you try the following:

  1. Check to see if there are any errors in the Console (Window > Console > Logging). It might give an error regarding ASIO that we can use to diagnose further.
  2. Are you able to use ASIO4ALL to connect these devices to FMOD?

Thanks,
Richard

1 Like

#5

Hi Alain,

Are you still experiencing issues when trying to use ASIO?

Thanks,
Richard

1 Like

#6

We’ve just tried this on a Fireface UCX only to encounter exactly the same issue. Again in FMOD Designer it works fine but FMOD Studio fails in ASIO mode.

We also tried an M-Audio Super DAC, this works perfectly with FMOD Studio in ASIO mode.

0 Likes

#7

Hi Richard,

Apologies for the delay is responding, I’ve been on vacation.

The console windows shows these two errors:

10:57:10 fmod_output_asio.cpp(308), OutputASIO::init(): Requested DSP buffer count of 4 is being forced to 2.
10:57:10 fmod_output_asio.cpp(362), OutputASIO::init(): DSP buffer size 1024 must be between 384 and 384 or a divisor of 384.

I’ve not tried ASIO4ALL yet, however as mentioned previously FMOD Designer works fine in ASIO, it’s just FMOD Studio that has this problem.

Thanks,

Ade

0 Likes

#8

Hi Richard,

Those two console messages were a big clue!

If I tick the box to ‘Force DSP buffer block size to X samples’ and set it to 384 ASIO now works properly in FMOD Studio.

Furthermore setting:

buffer_length=384
num_buffers=2

In our application’s FMOD ini file also works!

Thanks for the pointers.

Best regards,

Alain

1 Like

#9

Hi Alain,

Thanks for the update. I’m very happy to hear you’ve managed to resolve this problem. Let me know if you experience any other problem.

Thanks,
Richard

1 Like

#10

Hi Richard,

I’m experiencing a new problem running FMOD Studio (1.10.11) with ASIO.

Whenever I run FMOD Studio with ASIO selected on startup I get no audio output. If I go to Audio preferences I see ASIO is selected but there are no devices listed in the 2nd dropdown.

If I look in the console I see:

15:49:33 fmod_output_asio.cpp(80), OutputASIO::init(): You can only have a single instance of ASIO active at a time.

15:49:33 FMOD_ERROR (47): Error initializing output device, but more specifically, the output device is already in use and cannot be reused.

I find this strange as this happens even on a clean boot of the system when I’ve not run any apps that utilise ASIO.

What’s even more strange is if I select e.g. DirectSound and then change back to ASIO I have two ASIO devices appear in the list (BC USB DAC and Asus Essence STX II) and both can be selected and work just fine.

Until the next time I restart FMOD Studio, when the cycle starts again - the ASIO device selection is blank.

Do you have any idea why this might be happening please or what I might be able to do about it?

Thanks,

Alain

0 Likes

#11

Hi Alain,

This is happening because when you start FMOD Studio up, it opens a blank project. This project is using the ASIO driver. When you select a project from the Welcome dialog or from the File > Open menu, the blank project will be closed and the new project will be opened, but the ASIO driver still thinks it’s being used by the (now gone) blank project.

Try opening your FMOD Studio project by double clicking on the project’s .fspro file in your file browser (File Explorer on Windows, Finder on Mac) and see if this helps with this situation.

Thanks,
Richard

0 Likes

#12

Hi Richard,

Thanks for the suggestion, that does indeed help.

We’re still having lots of problems initialising FMOD Studio ASIO from our application though. It’s similar to the problem we originally started this thread for, however even if we use what we think are the correct buffer size and number of buffers we’re still having issues.

The issue is that FMOD reports just a single ‘NoSound Driver’, even if there are multiple ASIO devices that all work in FMOD Studio (after using the solution you mentioned above).

Could something similar be going on during ASIO init in our app and if so do you have any suggestions on how we might solve the problem? If you need any more info please do let me know.

Thanks,

Alain

0 Likes

#13

Are you able to use System::getNumDrivers() and System::getDriverInfo() to see what devices are available?

It is possible that another software has “locked” onto the ASIO driver before the application that uses FMOD is initialized. It generally isn’t recommended to use ASIO as the FMOD application’s driver unless you are absolutely certain that no other application could be using the ASIO driver.

You can use a function in your application to have a fallback driver if one driver doesn’t work.

0 Likes

#14

Yes, that’s exactly what we are doing in our app. On this particular system I’m using now without ASIO enabled we get 4 drivers, with ASIO enabled we get 1 driver called NoSound Driver.

We are absolutely certain no other application is attempting to use ASIO on the system. The application we’re talking about here is rFpro, please see http://www.rfpro.com.

In case it offers any clues here is the relevant output from our app:

[FMOD] Initialising FMOD ASIO driver
[FMOD] getDSPBufferSize 1024, 4
[FMOD] setDSPBufferSize 64, 2
[FMOD] mStudioSystem->initialize
[FMOD] mSystem->setOutput
[FMOD] mSystem->getNumDrivers
[FMOD] Available output drivers:
[FMOD] 1 : NoSound Driver
[FMOD] Requested driver: C-Media Oxygen ASIO (64)
[FMOD] Using driver: NoSound Driver
[FMOD] System rate: 48000

If I run FMOD Studio I get two ASIO drivers listed:

BC USB DAC (actually an M-Audio SuperDAC II)
C-Media Oxygen ASIO (64) (actually an Asus Essence STX II)

Please do let me know if you have any further ideas on what our problem might be.

Best regards,

Alain

0 Likes

#15

From the look of your logs, you are initializing the FMOD Studio system before setting the output. Can you please try calling mSystem->setOutput(FMOD_OUTPUTTYPE_ASIO) before mStudioSystem->initialize() and let me know if this helps?

If you only have ASIO drivers and no WDM drivers, then it will return NoSound because WASAPI is failing.

0 Likes

#16

Hi Richard,

We are indeed calling mStudioSystem->initialize() before mSystem->setOutput().

Our call to setOutput looks like this:

mSystem->setOutput(useASIO ? FMOD_OUTPUTTYPE_ASIO : FMOD_OUTPUTTYPE_AUTODETECT)

where the useASIO bool is set depending on an ini file setting, so we can enable & disable ASIO at runtume as desired.

With useASIO set false when I swap the calls around so setOutput is first and initialise second all is well (as it is the other way around). It seems the order of the calls makes no difference when not using ASIO.

Here’s the output I get with ASIO disabled:

[FMOD] Available output drivers:
[FMOD] 1 : Corsair Headphones (Realtek High Definition Audio)
[FMOD] 2 : S/PDIF Pass-through Device (ASUS Essence STX II Audio Device)
[FMOD] 3 : Rift Headphones (Rift Audio)
[FMOD] 4 : Bose Headphones (BC USB DAC)
[FMOD] 5 : Speakers (ASUS Essence STX II Audio Device)
[FMOD] Requested driver: C-Media Oxygen ASIO (64)
[FMOD] Using driver: Corsair Headphones (Realtek High Definition Audio)
[FMOD] System rate: 48000

When I enable ASIO then the order of the setOutput/initialise calls does chage things.

With the original order of initialise then then setOutput I get:

[FMOD] Available output drivers:
[FMOD] 1 : NoSound Driver
[FMOD] Requested driver: C-Media Oxygen ASIO (64)
[FMOD] Using driver: NoSound Driver
[FMOD] System rate: 48000

However if I swap the calls around so setOutput is first then initialise I get:

[FMOD] ERROR: FMOD ERROR 51 : Error initializing output device.
[FMOD] ERROR: FMOD ERROR 30 : An invalid object handle was used.
[FMOD] WARNING: No output drivers found

How can it be that swapping the call order makes no difference when using WASAPI but does make a difference when using ASIO?

Thanks,

Alain

0 Likes

#17

FMOD has a feature where you can change output and driver post-init. In this case, you should forget that feature exists and concentrate on just initializing with setOutput being called first. This is the normal usage pattern.

Setting and querying ASIO when the soundcard is already in use by WASAPI, is probably why it doesn’t work post init. ASIO is not friendly with other sound card drivers and expects exclusive access.

This invalidates most of your logging output, except for just this part?

[FMOD] ERROR: FMOD ERROR 51 : Error initializing output device.
[FMOD] ERROR: FMOD ERROR 30 : An invalid object handle was used. << this error is because you continued to use the handle after failure.
[FMOD] WARNING: No output drivers found << same

You need to provide an * FMOD * log output so we can see what the messages are.

I am going to guess it is buffer size related, because you have to specify the same buffer size that ASIO is set to at the moment. If the log produces this error, we can force the buffer size in fmod with System::setDSPBufferSize.

I can also provide an internal version of FMOD based on 1.10 which can handle any buffersize, and upload it to your account profile if you like. (if this is the issue)

0 Likes