Can't manipulate audio volumes from blueprint?!

Tweeter version:
The title says it all, is a there a way I can’t find?

If not why most say “one can create a full game with BP”, when BP can’t even handle such a simple and common task?

Long version:
I’m at a stage where I’m making the backend of the options page for a very simple game. The Audio section of the options page (no art yet) looks like this:

So as you can see there are 3 categories for all the soundcues in the game, I already programmed the sliders to not be continuous, and have steps of 10, so each slidebar can have a value of 0 through 10; so 11 states for each slider.

We would do something like this very easily in UE3 using unrealscript:

I understand in UE4’s C++ it’s almost the same, and we could access the sound classes via GetAudioDevice(). I searched blueptint up to bottom only to find out we don’t have any access to neither the Engine class, nor the GetAudioDevice function, so we cannot iterate through the sound classes. I also checked and made sure we can’t manipulate those SoundClasses or SoundMixes by having a direct reference.


Now why I don’t just use 10 lines of C++ to do this instead of a full page post here, considering I’m actually a programmer and not a designer? Well the whole point of this project since the moment I started it a few weeks back, was to see if what everyone says is true: * “You can make a full game with blueprints” *.

When I started I figured if that statement proved to be true, I’d stick to BP for small/mobile games, unless I need some advanced parts in the game, and only use C++ for the base of larger scaled games, plus whenever I need to use more advanced features. Now obviously changing volume is no advanced thing, even a tetris game should allow you modify the sound volumes.

The only way I could find so far to do this in BP, is to create a SoundMix for each state of each slider, and swtich between or rather push/pop them. But that means creating and managing 33 SoundMixes, which doesn’t make any sense, I would call it not a solution, but a workaround, and a bad one at that.


It won’t be that hard for me to switch to a C++ based project at this moment, but if I have to do that for such a simple task, then the statement above in italic is just a myth, while BP is much more powerful than Kismet, and I admit I found to like it, but it is in no way a replacement for UnrealScript, as been advertised, and you also cannot create a full publishable game with it, not even a simple one.

So now the question is, (I’m almost certain there isn’t, but in case I missed it) is there really any way to do a very simple thing like this in BP? If not, is there a plan to expose the GetAudioDevice function to BP, or make some other way available, in near future? Or really the only solution would be to switch to C++ after all?

Rama’s BP library has a recent addition that lets you set the volume for any sound class:

Thanks for the link Jacky, although you might wanna read the last section of my post again. still waiting for an official word.

Using a plugin for something so simple, still means stucking in the old version of the engine until the plugin gets updated, and while it had a quick update so far, we can’t know if that would be the case in future (you can update it yourself, but again, using C++). Besides, I already mentioned, I am primarily a programmer myself, Rama himself knows me, If I were to go this way, I would rather to switch to a C++ based project and write the code myself to have all the control I need over it and don’t worry about third party updates.

But again, all this still means that you can’t create a game without the use of C++. In the end wouldn’t you agree that BP should be able to do such a simple task out of the box, when every single game needs it?

I agree that there are some things that should be already available in BP’s. Hopefully those will reduce with every update. For instance, Rama had created a Get OS Time node, which hadnt existed in blueprints and it is a very handy thing to have. Then Epic implemented a whole bunch of nodes related to OS Time with 4.5.

So, I suggested the plug-in node so that you could use it if it was an urgent need. Otherwise, this would get better attention in the forums as a feedback.

Yeah don’t worry about that, I have other projects going that I can focus on for a while, and even this project still has quite a few parts that need my attention, so I’m not in a rush. I mean if it came to that, I can even hold this audio options for a while in case there is a plan to overcome this in the engine in short-term.

Good to know, I’ll come back in a while and if there’s still no response I’ll post a thread in the forums with this info and link back.

any update on changing soundclass volume from blueprint? :frowning:

I’m waiting for this as well.

Me putting up this thread 15 months ago, with no official response whatsoever, I can only suggest that you don’t wait for this and take care of it in C++, BP simply can’t take care of a full game, not without the help of C++, even if it’s a 2 level mobile game.

A few weeks after I set this up and saw that there is no reaction to it, I just gave in and did it in C++ for that project, and ever since then, I always use a C++ project instead of a BP one, at least you can finish your game that way.

You know, more than anything, my biggest disappointment here was the fact that no Epic staff even responded by a “No we won’t do anything” comment, nothing, neither here nor in the forum post that I sent at the same time of this one (considering this very simple issue, is something that only they can take care of), this is the link:

Anyway, I suggest to just convert to a C++ project from now on, and either use C++ yourself, or the plugins to take care of these small, but critical features. And remember, that unfortunately this is not the last time that BP will let you down in your project.

Hi,

what’s your approach to do it in C++?

I did a setup in C++ by call GetMainAudioDevice and change the SoundClass volume in “Properties”, but it seems to be reseted each time I’m travelling to a new level.

Could you please share what you done so I can get what’s wrong in my implementation?
Thanks,