Jump to content
roguetrooper

playsound3d and vanilla sound list?

Recommended Posts

Is there a list of all vanilla sound effects?

I know, the names can be found out with triggers and searching the mission.sqm. But I need the full path and file name to be able to play it with playsound3d.

These work:

playSound3D ["A3\Sounds_F\sfx\alarm_independent.wss", player];
playSound3D ["A3\Sounds_F\sfx\Alarm_BLUFOR.wss", player];

But strangeley these do not work:

playSound3D ["A3\Sounds_F\sfx\SN_Flare_Fired_4.wss", player];
playSound3D ["A3\Sounds_F\sfx\FD_Timer_F.wss", player];

Anyway it would be very helpful to have the script-names (and file locations) of sounds displayed in the editor trigger window, such as the script-names of objects and units are displayed.

Edit:

Meanwhile I had a look into various sound-pbo-files with "PBO manager".

According to the "alarm_independent"-example that works I tried to play the flare shot:

playSound3D ["A3\sounds_f_weapons\Flare_Gun\flaregun_1_shoot.wss", player];

No success :-/

Edited by RogueTrooper

Share this post


Link to post
Share on other sites

Run this code inside the debug console and look your rpt after:

_cfg = configFile >> "cfgSounds";
for "_i" from 0 to (count _cfg) - 1 do { _sounds = getArray (configfile >> "CfgSounds" >> configName (_cfg select _i) >> "sound");
diag_log format ["%1", _sounds select 0];};

Edited by DaVIdoSS

Share this post


Link to post
Share on other sites

Run this code inside the debug console and look your rpt after:

 

_cfg = configFile >> "cfgSounds";
for "_i" from 0 to (count _cfg) - 1 do { _sounds = getArray (configfile >> "CfgSounds" >> configName (_cfg select _i) >> "sound");
diag_log format ["%1", _sounds select 0];};

Davidoss's awesome code above does show config paths to Sounds so we can re-use them.

 

But I don't see vanilla voice commands like "Move There", "Disengage", "Mount Vehicle", "Disembark", etc.

 

I would like to re-use these voice commands from multiple languages like "FRE", "CHI", "PER", etc.

 

Can I use a similar command to find all these Voice Command files? 

 

Please advise.

Share this post


Link to post
Share on other sites

That voices are not in CfgSounds but CfgVoice

and those files are in dubbing_radio_f_data_eng.bpo

  • Like 1

Share this post


Link to post
Share on other sites

Run from debugConsole in mission preview. Careful ive tried to seperate the sounds out a little but things like CfgSentences comes back with nearly 5000 clips and can lag things out a bit due to the number of controls created. I have also not taken for granted file extensions and check, if a sound does not supply one, via loadfile, so will spam your RPT with some warning messages.

Tis what it is a test script.

LARs_fnc_findGameSounds = {
    if !( canSuspend ) exitWith { _this spawn LARs_fnc_findGameSounds };

    disableSerialization;
    private [ "_color", "_total", "_totalIndex", "_stxt", "_display", "_ctrlGrp" ];
    params[ "_cfg" ];

    _fnc_getColor = {
        _r = linearConversion[ 0, _total, _totalIndex, 1, 0 ];
        _g = linearConversion[ 0, _total, _totalIndex, 0, 1 ];
        _color = [ _r, _g, 0, 1 ] call BIS_fnc_colorRGBAtoHTML;
    };

    _fnc_createProgress = {

        createDialog "RscDisplayNotFreezeBig";
        waitUntil { _display = findDisplay 100002; !isNull _display };

        {
            _ctrl = _display displayCtrl _x;
            _ctrl ctrlSetPosition [ 0, 0, 0, 0 ];
            _ctrl ctrlCommit 0;
        }forEach [ 101, 1080, 1081, 1082, 1083 ];

        _stxt = _display ctrlCreate [ "RscStructuredText", 1000 ];
        _stxt ctrlSetPosition [ 0, -0.13, 1, 0.1 ];
        _stxt ctrlCommit 0;
    };

    _fnc_working = {
        params[ "_count", "_msg" ];
        _msg params[ "_prefix", "_suffix" ];

        _msg = format[ "<t color='%1'>%2</t>", _color, _prefix ];

        for "_i" from 0 to ( _count % 30 ) do {
            _msg = format[ "%1.", _msg ];
        };

        _msg = format[ "%1<br/>%2/%3 %4<br/>", _msg, _totalIndex, _total, _suffix ];
        _stxt ctrlSetStructuredText parseText _msg;

    };

    _fnc_isSound = {
        params[ "_value" ];

        if ( toLower( _value select [ 0, 6 ] ) isEqualTo "str_a3" ) then {
            _value = localize _value;
        };
        if ( _value isEqualTo "" ) exitWith {};

        if ( _value find "\" > -1 ) then {
            _value = toLower _value;
            {
                _tmp = _value splitString _x;
                {
                    _part = _x;
                    if ( _part find "." > -1 ) then {
                        {
                            if( _part select [ (( count _part ) -4 ), 4 ] isEqualTo _x ) exitWith {
                                _nul = _cfgSounds pushBackUnique [ _part, _part, _part ];
                            };
                        }forEach[ ".wss", ".ogg" ];
                    }else{
                        _file = _part call _fnc_getFileType;
                        if !( _file isEqualTo "" ) then {
                            _nul = _cfgSounds pushBackUnique [ _part, _file, _part ];
                        };
                    };
                }forEach _tmp;
            }forEach[ "'", " ", "," ];
        };
    };

    _fnc_getProperties = {
        params[ "_cfg" ];

        _properties = configProperties[ _cfg, "isText _x || isArray _x", false ];

        {

            [ _forEachIndex, [ "Searching config", "root classes" ] ] call _fnc_working;

            if ( configName _x find "sound" > -1 ) then {
                switch ( true ) do {
                    case ( isText _x ) : {
                        ( getText _x ) call _fnc_isSound;
                    };
                    case ( isArray _x ) : {
                        {
                            if ( _x isEqualType "" ) then {
                                _x call _fnc_isSound;
                            };
                        }forEach getArray( _x );
                    };
                };
            };
        }forEach _properties;
    };

    _fnc_getClasses = {
        params[ "_cfg", [ "_root", true ] ];

        if ( { toLower _x in [ "cfgmusic", "cfgradio", "cfgsounds", "cfgsfx", "cfgsentences", "cfgsoundshaders" ] }count ( [ _cfg, [] ] call BIS_fnc_configPath ) > 0  ) exitWith {};

        _classes = ( "true" configClasses _cfg );
        if ( _root ) then {
            _total = count _classes;
            _cfg call _fnc_getProperties;
        };

        {
            if ( _root ) then {
                _r = linearConversion[ 0, _total, _forEachIndex, 1, 0 ];
                _g = linearConversion[ 0, _total, _forEachIndex, 0, 1 ];
                _color = [ _r, _g, 0, 1 ] call BIS_fnc_colorRGBAtoHTML;
                _totalIndex = _forEachIndex;
            };

            _x call _fnc_getProperties;
            [ _x, false ] call _fnc_getClasses;
        }forEach _classes;
    };

    _fnc_defaultSounds = {
        private[ "_cfg" ];
        
        comment"//CfgMusic + CfgRadio";
        {
            _cfgSounds = LARs_configSounds select _forEachIndex;
            _childClasses = ( "true" configClasses( configFile >> _x ) );
            _total = count _childClasses;
            _baseConfig = _x;
            {
                _totalIndex = _forEachIndex;
                call _fnc_getColor;
                [ _forEachIndex, [ format[ "Searching %1", _baseConfig ], "root classes" ] ] call _fnc_working;
                _sound = getArray( _x >> "sound" ) select 0;
                _nul = _cfgSounds pushBackUnique [ configName _x, _sound, getText( _x >> ( [ "name", "title" ] select ( _baseConfig isEqualTo "CfgRadio" )) ) ];
            }forEach _childClasses;
        }forEach[ "CfgRadio", "CfgMusic" ];
        
        comment"//CfgSounds";
        _cfgSounds = LARs_configSounds select 2;
        _childClasses = ( "true" configClasses( configFile >> "CfgSounds" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            [ _forEachIndex, [ format[ "Searching %1", "CfgSounds" ], "root classes" ] ] call _fnc_working;
            _tmp = getArray( _x >> "sound" ) select 0;
            if !( isNil "_tmp" ) then {
                _file = _tmp call _fnc_getFileType;
                if !( _file isEqualTo "" ) then {
                    _nul = _cfgSounds pushBackUnique [ configName _x, _file, getText( _x >> "name" ) ];
                };
            };
        }forEach _childClasses;

        comment"//CfgSfx";
        _cfgSounds = LARs_configSounds select 3;
        _childClasses = ( "true" configClasses( configFile >> "CfgSfx" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            [ _forEachIndex, [ format[ "Searching %1", "CfgSfx" ], "root classes" ] ] call _fnc_working;
            _cfg = _x;
            _cfgName = configName _x;
            if ( isArray( _cfg >> "sounds" ) ) then {
                {
                    _tmp = getArray( _cfg >> _x ) select 0;
                    _file = _tmp call _fnc_getFileType;
                    if !( _file isEqualTo "" ) then {
                        _nul = _cfgSounds pushBackUnique [ _cfgName, _file, _cfgName ];
                    };
                }forEach getArray( _cfg >> "sounds" );
            }else{
                {
                    _tmp = getArray( _x ) select 0;
                    _file = _tmp call _fnc_getFileType;
                    if !( _file isEqualTo "" ) then {
                        _nul = _cfgSounds pushBackUnique [ _cfgName, _file, _cfgName ];
                    };
                }forEach configProperties[ _cfg, "isArray( _x )", false ];
            };
        }forEach _childClasses;


        comment"//CfgSentences";
        _cfgSounds = LARs_configSounds select 4;
        _childClasses = ( "true" configClasses( configFile >> "CfgSentences" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            {
                {
                    [ _forEachIndex, [ format[ "Searching %1", "CfgSentences" ], "root classes" ] ] call _fnc_working;
                    _cfgName = configName _x;
                    _file = getArray( _x >> "speech" ) select 0;
                    if !( isNil "_file" ) then {
                        _text = getText( _x >> "text" );
                        _nul = _cfgSounds pushBackUnique [ _cfgName, _file, _text ];
                    };
                }forEach ( "true" configClasses( _x >> "Sentences" ) );
            }forEach ( "true" configClasses( _x ) );
        }forEach _childClasses;

        comment"//CfgSoundShaders";
        _cfgSounds = LARs_configSounds select 5;
        _childClasses = ( "true" configClasses( configFile >> "CfgSoundShaders" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            _cfgName = configName _x;
            {
                [ _forEachIndex, [ format[ "Searching %1", "CfgSoundShaders" ], "root classes" ] ] call _fnc_working;
                _tmp = _x select 0;
                _file = _tmp call _fnc_getFileType;
                if !( _file isEqualTo "" ) then {
                    _nul = _cfgSounds pushBackUnique [ format[ "%1_%2", _cfgName, _forEachIndex ], _file, _cfgName ];
                };
            }forEach getArray( _x >> "samples" );
        }forEach _childClasses;
    };

    _fnc_getFileType = {
        private[ "_ext" ];
        params[ "_filepath" ];
        
        _ext = {
            _x params[ "_ext", "_type" ];
            _file = format[ "%1%2", _filepath, _ext ];
            _isType = loadFile _file;
            if ( _isType isEqualTo _type ) exitWith { _ext };
        }forEach[
            [ ".wss", "WSS0" ],
            [ ".ogg", "OggS" ]
        ];
        
        if ( !isNil "_ext" ) exitWith {
            format[ "%1%2", _filepath, _ext ];
        };
        
        ""
    };

    call _fnc_createProgress;

    if ( isNil "LARs_configSounds" ) then {
        LARs_configSounds = [ [], [], [], [], [], [] ];
        call _fnc_defaultSounds;
    };
    if ( !isNil "_cfg" ) then {
        if ( !isNil "LARs_lastConfigSound" ) then {
            if !( _cfg isEqualTo LARs_lastConfigSound ) then {
                LARs_lastConfigSound = _cfg;
            };
        }else{
            LARs_lastConfigSound = _cfg;
        };
        _nul = LARs_configSounds pushBack [];
        _cfgSounds = LARs_configSounds select 6;
        _cfg call _fnc_getClasses;
    };
    

    LARs_fnc_fillUI = {
        params[ "_index" ];
        
        LARs_soundMasterCtrls params[ "_display", "_ctrlGrp", "_stxt" ];
        
        if !( isNil "LARs_soundCtrls" ) then {
            {
                {
                    if ( !isNil "_x" || { !isNull _x } ) then {
                        ctrlDelete _x;
                    };
                }forEach _x;
            }forEach LARs_soundCtrls;
        };
        LARs_soundCtrls = [];
        
        _stxt ctrlSetStructuredText parseText "Please wait filling UI";

        _picHeight = 0.18;
        {
            _x params[ [ "_heading", "" ], [ "_file", "?" ], [ "_description", "" ] ];
            
            if ( _file select [ 0, 1 ] isEqualTo "\" ) then {
                _file = _file select [ 1, count _file ];
            };
            
            _picGrp = _display ctrlCreate [ "RscControlsGroup", 10010 + _forEachIndex, _ctrlGrp ];
            _picGrp ctrlSetPosition [ 0, _picHeight * _forEachIndex, 1, _picHeight ];
            _picGrp ctrlCommit 0;

            _pic = _display ctrlCreate [ "RscActivePictureKeepAspect", 50000 + _forEachIndex, _picGrp ];
            _pic ctrlSetPosition [ 0, 0, _picHeight, _picHeight ];
            _pic ctrlSetText "\a3\modules_f_curator\data\portraitsound_ca.paa";
            _pic buttonSetAction format[ "playSound3D[ %1, player ]; hint 'copied to clipboard'; copyToClipboard str %1", str _file ];
            _pic ctrlCommit 0;

            _sTxtDescription = _display ctrlCreate [ "RscStructuredText", 80000 + _forEachIndex, _picGrp ];
            _sTxtDescription ctrlSetPosition [ _picHeight, 0, 1-_picHeight, _picHeight ];
            _sTxtDescription ctrlSetStructuredText  parseText format[ "<t color='#FFFF0000'>%1<t/><br/><t color='#FFFFFFFF'>%2<t/><br/><t color='#FF0000FF'>%3<t/>", _heading, _file, _description ];
            _sTxtDescription ctrlCommit 0;
            
            _nul = LARs_soundCtrls pushBack [ _sTxtDescription, _pic, _picGrp ];
        }forEach ( LARs_configSounds select _index );

        _stxt ctrlSetStructuredText parseText "Click speaker icon to preview sound and copy it to the clipboard";

    };
    
    if ( count LARs_configSounds > 0 ) then {
        
        _ctrlGrp = _display ctrlCreate [ "RscControlsGroup", 1001 ];
        _ctrlGrp ctrlSetPosition [ 0, 0, 1, 1 ];
        _ctrlGrp ctrlCommit 0;
        
        _titles = [ "CfgRadio", "CfgMusic", "CfgSounds", "CfgSfx", "CfgSentences", "CfgSoundShaders" ];
        if !( isNil "LARs_lastConfigSound" ) then {
            _nul = _titles pushBack configName LARs_lastConfigSound;
        };
        
        _btnLength = 1/count _titles;
        {
            _title = _titles select _forEachIndex;
            
            _btn = _display ctrlCreate [ "RscButton", 500 + _forEachIndex ];
            _btn ctrlSetPosition [ _btnLength * _forEachIndex, -0.03, _btnLength, 0.03 ];
            _btn ctrlSetText _title;
            _btn buttonSetAction format[ "[ %1 ] call LARs_fnc_fillUI", _forEachIndex ];
            _btn ctrlCommit 0;
        }forEach LARs_configSounds;
        
        LARs_soundMasterCtrls = [ _display, _ctrlGrp, _stxt ];
        
        [ 0 ] call LARs_fnc_fillUI;
    };

};

[] call LARs_fnc_findGameSounds;
  • Like 6
  • Thanks 1

Share this post


Link to post
Share on other sites

That voices are not in CfgSounds but CfgVoice

and those files are in dubbing_radio_f_data_eng.bpo

@davidoss:  Thanks man, really appreciate it.  I tried substituting CfgVoice into your snippet, but its not finding all the individual voice commands ("Stop", "Disembark", "Move There", etc. in all the different languages (English, French, Chinese, etc.).   Here's the snippet I tried in the console:

_cfg = configFile >> "CfgVoice"; 
for "_i" from 0 to (count _cfg) - 1 do 
{ 
  _sounds = getArray (configfile >> "CfgVoice" >> configName (_cfg select _i) >> "sound"); 
diag_log format ["%1", _sounds select 0];
};

My version of the snippet gives this in the .rpt file:

14:03:39 Warning Message: 'access/' is not a class ('voice' accessed)
14:03:39 "<null>"
14:03:39 Warning Message: 'voices/' is not a class ('voice' accessed)
14:03:39 "<null>"
14:03:39 Warning Message: 'femaleVoices/' is not a class ('voice' accessed)
14:03:39 "<null>"
14:03:39 Warning Message: 'voicePlayer/' is not a class ('voice' accessed)
14:03:39 "<null>"
14:03:39 Warning Message: 'micOuts/' is not a class ('voice' accessed)
14:03:39 "<null>"

How can I tweak the snippet to list all the voice files?  Your help is greatly appreciated.

 

 

Run from debugConsole in mission preview.

[] call LARs_fnc_findGameSounds;

@Larrow, wow man, that is freakin' badass!  Lots of groovy sounds to scavenge that i know I will use someday.  However, I'm not seeing the voice commands I'm looking for, which are "Stop", "Disembark", "Move There", etc. in all the different languages (English, French, Chinese, etc.).

Share this post


Link to post
Share on other sites

The radio protocols word lists are huge and need a ui of their own. I have not implemented any progress in this one just to help make it pass quicker.
 

LARs_fnc_findRadioProtocols = {
	if !( canSuspend ) exitWith { _this spawn LARs_fnc_findRadioProtocols };

	disableSerialization;
	private [ "_color", "_total", "_totalIndex", "_stxt", "_display", "_ctrlGrp" ];

	_fnc_getColor = {
		_r = linearConversion[ 0, _total, _totalIndex, 1, 0 ];
		_g = linearConversion[ 0, _total, _totalIndex, 0, 1 ];
		_color = [ _r, _g, 0, 1 ] call BIS_fnc_colorRGBAtoHTML;
	};

	_fnc_createProgress = {

		createDialog "RscDisplayNotFreezeBig";
		waitUntil { _display = findDisplay 100002; !isNull _display };

		{
			_ctrl = _display displayCtrl _x;
			_ctrl ctrlSetPosition [ 0, 0, 0, 0 ];
			_ctrl ctrlCommit 0;
		}forEach [ 101, 1080, 1081, 1082, 1083 ];

		_stxt = _display ctrlCreate [ "RscStructuredText", 1000 ];
		_stxt ctrlSetPosition [ 0, -0.15, 1, 0.1 ];
		_stxt ctrlCommit 0;
	};

	_fnc_working = {
		params[ "_count", "_msg" ];
		_msg params[ "_prefix", "_suffix" ];

		_msg = format[ "<t color='%1'>%2</t>", _color, _prefix ];

		for "_i" from 0 to ( _count % 30 ) do {
			_msg = format[ "%1.", _msg ];
		};

		_msg = format[ "%1<br/>%2/%3 %4<br/>", _msg, _totalIndex, _total, _suffix ];
		_stxt ctrlSetStructuredText parseText _msg;

	};

	_fnc_getproperties = {
		params[ "_cfg", "_directory", "_words" ];
		
		_properties = configProperties[ _cfg, "true", true ];
		{
			call _fnc_getColor;
			[ _forEachIndex, [ format[ "Passing %1 - %2", _rootClass, configName _cfg ], "root classes" ] ] call _fnc_working;
			_name = configName _x;
			{
				_path = _x;
				if !( toLower( _path select [0,3] ) isEqualTo "\a3" ) then {
					_path = format[ "%1%2", _directory, _path ];
				};
				if !( loadFile _path isEqualTo "" ) then {
					_nul = _words pushBack [ format[ "<t color='#FFFF0000'>%1<t/>  <t color='#FF0000FF'>variation %2<t/>", _name, _forEachIndex ], _path ];
				};
			}forEach getArray( _x );
		}forEach _properties;
	};
	
	call _fnc_createProgress;
	
	if ( isNil "LARs_radioProtocols" ) then {
		
		LARs_radioProtocols = [];
		_cfgVoice = ( "true" configClasses( configFile >> "CfgVoice" ) );
		{
			_directory = getArray( _x >> "directories" ) select 0;
			if !( _directory isEqualTo "" ) then {
				_displayName = getText( _x >> "displayName" );
				_protocol = getText( _x >> "protocol" );
				_cfg = configFile >> _protocol >> "Words";
				
				_classes = "true" configClasses( _cfg );
				_words = [];
				_nul = _words pushBack [ "Default", [] ];
				{
					_nul = _words pushBack [ configName _x, [] ];
				}forEach _classes;
				_nul = LARs_radioProtocols pushBack [ _displayName, _directory, _cfg, _words ];
			};
		}forEach _cfgVoice;

		_protocols = LARs_radioProtocols;
		_total = count LARs_radioProtocols;
		{
			_totalIndex = _forEachIndex;
			call _fnc_getColor;
			_x params[ "_displayName", "_directory", "_cfg", "_words" ];
			_rootClass = _displayName;
			[ _cfg, _directory, _words select 0 select 1 ] call _fnc_getproperties;
			{
				[ _x, _directory, _words select ( _forEachIndex + 1 ) select 1 ] call _fnc_getproperties;
			}forEach ( "true" configClasses( _cfg ));
		}forEach _protocols;
	};

	LARs_fnc_fillUI = {
		params[ "_index", "_sec" ];
		
		LARs_soundMasterCtrls params[ "_display", "_nameGrp", "_wordGrp", "_stxt" ];
		_nameLength = ( ctrlPosition _nameGrp ) select 2;		

		_stxt ctrlSetStructuredText parseText "Please wait filling UI..";

		if !( isNil "LARs_soundCtrls" ) then {
			{
				{
					if ( !isNil "_x" || { !isNull _x } ) then {
						ctrlDelete _x;
					};
				}forEach _x;
			}forEach LARs_soundCtrls;
			{
				{
					if ( !isNil "_x" || { !isNull _x } ) then {
						ctrlDelete _x;
					};
				}forEach _x;
			}forEach LARs_sectionBtns;
		};
		LARs_soundCtrls = [];
		LARs_sectionBtns = [];
		
		for "_btnLanguage" from 0 to count LARs_radioProtocols do {
			_ctrl = _display displayCtrl 1001 controlsGroupCtrl ( 1010 + _btnLanguage );
			if ( _btnLanguage isEqualTo _index ) then {
				_ctrl ctrlSetTextColor [ 1, 0, 0, 1 ];
			}else{
				_ctrl ctrlSetTextColor [ 1, 1, 1, 1 ];
			};
		};
		
		_sections = ( LARs_radioProtocols select _index select 3 );
		_btnPerRow = ( count _sections ) / 2;
		_btnLength = 1/_btnPerRow;
		_btnHeight = 0.03;
		_btnSpacing = 0.005;
		
		_picHeight = 0.1;
		{
			_sectionIndex = _forEachIndex;
			_x params[ "_sectionName", "_words" ];
			
			_btn = _display ctrlCreate [ "RscButton", 3000 + _forEachIndex ];
			_btn ctrlSetPosition [ _btnLength * ( _forEachIndex % _btnPerRow ) , ( -_btnHeight + -_btnSpacing ) * ( 2 - floor( _forEachIndex/_btnPerRow )), _btnLength, _btnHeight ];
			_btn ctrlSetText _sectionName;
			_btn buttonSetAction format[ "[ %1, %2 ] call LARs_fnc_fillUI", _index, _forEachIndex ];
			if ( _sectionIndex isEqualTo _sec ) then {
				_btn ctrlSetTextColor [ 1, 0, 0, 1 ];
			}else{
				_btn ctrlSetTextColor [ 1, 1, 1, 1 ];
			};
			_btn ctrlCommit 0;
			
			
			if ( _sectionIndex isEqualTo _sec ) then {
				{
					_x params[ "_name", "_file" ];
					
					if ( _file select [ 0, 1 ] isEqualTo "\" ) then {
						_file = _file select [ 1, count _file ];
					};
					
					_picGrp = _display ctrlCreate [ "RscControlsGroup", 5000 + _forEachIndex, _wordGrp ];
					_picGrp ctrlSetPosition [ 0, _picHeight * _forEachIndex, 1-_nameLength, _picHeight ];
					_picGrp ctrlCommit 0;

					_pic = _display ctrlCreate [ "RscActivePictureKeepAspect", 7000 + _forEachIndex, _picGrp ];
					_pic ctrlSetPosition [ 0, 0, _picHeight, _picHeight ];
					_pic ctrlSetText "\a3\modules_f_curator\data\portraitsound_ca.paa";
					_pic buttonSetAction format[ "playSound3D[ %1, player ]; hint 'copied to clipboard'; copyToClipboard str %1", str _file ];
					_pic ctrlCommit 0;

					_sTxtDescription = _display ctrlCreate [ "RscStructuredText", 9000 + _forEachIndex, _picGrp ];
					_sTxtDescription ctrlSetPosition [ _picHeight, 0, ( 1-_nameLength )-_picHeight, _picHeight ];
					_sTxtDescription ctrlSetStructuredText  parseText format[ "%1<br/><t color='#FFFFFFFF'>%2<t/>", _name, _file ];
					_sTxtDescription ctrlCommit 0;
					
					_nul = LARs_soundCtrls pushBack [ _sTxtDescription, _pic, _picGrp ];
				}forEach _words;
			};

		}forEach _sections;

		_stxt ctrlSetStructuredText parseText "Click speaker icon to preview sound and copy it to the clipboard";

	};
	
	_nameLength = 0.3;
	_nameHeight = 0.06;
	
	_nameGrp = _display ctrlCreate [ "RscControlsGroup", 1001 ];
	_nameGrp ctrlSetPosition [ 0, 0, _nameLength, 1 ];
	_nameGrp ctrlCommit 0;
	
	_wordGrp = _display ctrlCreate [ "RscControlsGroup", 1002 ];
	_wordGrp ctrlSetPosition [ _nameLength, 0, 1-_nameLength, 1 ];
	_wordGrp ctrlCommit 0;
	
	{
		_x params[ "_displayName", "_directory", "_cfg", "_words" ];
		_btn = _display ctrlCreate [ "RscButton", 1010 + _forEachIndex, _nameGrp ];
		_btn ctrlSetPosition [ 0, _nameHeight * _forEachIndex, _nameLength, _nameHeight ];
		_btn ctrlSetText _displayName;
		_btn buttonSetAction format[ "[ %1, 0 ] call LARs_fnc_fillUI", _forEachIndex ];
		_btn ctrlCommit 0;
	}forEach LARs_radioProtocols;
	
	LARs_soundMasterCtrls = [ _display, _nameGrp, _wordGrp, _stxt ];
	
	[ 0, 0 ] call LARs_fnc_fillUI;
};

[] call LARs_fnc_findRadioProtocols;

UPDATED: split each protocol down into their types e.g Combat, Stealth etc

  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites

The radio protocols word lists are huge and need a ui of their own. I have not implemented any progress in this one just to help make it pass quicker.

 


[] call LARs_fnc_findRadioProtocols;

UPDATED: split each protocol down into their types e.g Combat, Stealth etc

@Larrow:  You are a monster dude.  If a super hot chick rings your doorbell tomorrow, let her in.  She's instructed to flick cheetos off your chest for a week while you code.  Its the least I can do.

 

First off, I ran the above and my machine siezed up for a minute before Arma finally crashed.  :(   But it recorded what looks like exactly what I am looking for in the  .rpt file!!! :D :D  :D  :D  :D    Here's a few lines from the 238K lines (wow) written to the .rpt (all were "warning......ogg not found"):

20:19:42 Warning Message: Script \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Stop.ogg not found
20:19:42 Warning Message: Script \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Advance.ogg not found
20:19:42 Warning Message: Script \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\FormOnMe.ogg not found
20:19:42 Warning Message: Script \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Regroup.ogg not found
20:19:42 Warning Message: Script \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\StayBack.ogg not found

These look like exactly what I'm looking for, except they aren't playable.  I tried both .ogg and .wss as follows using say3d and playsound3d, and none worked.

player say3d "\A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Stop.ogg";
player say3d "\A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Stop.wss";

 All result in "not found":

20:41:48 Warning Message: Sound \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Stop.ogg not found
20:41:48 Warning Message: Sound \A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\NormalContact\100_Commands\Stop.wss not found

It seems like this is really close to working for me...   Is it possible there is something missing in the directory structure?

 

You've been very generous with your time and knowledge, and I do appreciate it.  If I get this to work, I'm assuming I can replace "ENG" with "PER", "CHI", "FRE", etc., in order to issue the same command in any supported language.  I plan to use a specific set of commands for commanding a police dog, and it will be really cool to have the dogs be multi-lingual (based on language returned by speaker command)!!!

 

BTW, if you plan on tweaking this further, you might consider on filtering to ENG only, as all the other languages have identical directory structures.  Another filter might be to limit to one speaker Male01ENG, as all the same commands are repeated for Male01ENG thru Male12ENG.

  • Haha 1

Share this post


Link to post
Share on other sites

All the messages you are seeing in the RPT are for files that are in the config but do not exist, hence the errors and the reason they do not work when copied.

Change the last line in the script to spawn instead of call. It will finish with a file not found error but has processed the configs, just run it again after to fill the UI.

 

EDIT Nevermind, recheck post #7, I have re-implemented progress so you can tell when it has properly finished passing the radio protocols.

 

@Larrow: You are a monster dude. If a super hot chick rings your doorbell tomorrow, let her in. She's instructed to flick cheetos off your chest for a week while you code. Its the least I can do.

What time :D i have my beef hoola hoops ready.

 

BTW, if you plan on tweaking this further, you might consider on filtering to ENG only, as all the other languages have identical directory structures. Another filter might be to limit to one speaker Male01ENG, as all the same commands are repeated for Male01ENG thru Male12ENG.

Yer i realise there is a quicker way to pass each type by the folder structure, was just being lazy and just wrote one function to pass a protocol and threw all protocols at it rather than calculating folder paths. Oh well. :shrug:
  • Like 1

Share this post


Link to post
Share on other sites

All the messages you are seeing in the RPT are for files that are in the config but do not exist, hence the errors and the reason they do not work when copied.

Change the last line in the script to spawn instead of call. It will finish with a file not found error but has processed the configs, just run it again after to fill the UI.

 

EDIT Nevermind, recheck post #7, I have re-implemented progress so you can tell when it has properly finished passing the radio protocols.

 

What time :D i have my beef hoola hoops ready.

 

Yer i realise there is a quicker way to pass each type by the folder structure, was just being lazy and just wrote one function to pass a protocol and threw all protocols at it rather than calculating folder paths. Oh well. :shrug:

Dude, it works beautifully.  I can't thank you enough.  So slick.

 

I'm glad you gave me all the protocols rather than filtering to ENG.  Turns out directory name patterns are not 100% identical, so I needed to see them all.  Here's "Attack" in all languages.  Directory naming a bit different for Expansion and for Bloody Brit English (I'm a bloody Yank, so I had to take that shot!).  Now I know the directory naming variations per language, I can build a slick command issueing module that supports all languages without hardcoding it all.

"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"   <<-- PROTOCOL IS ENG, NOT ENGB
         
"A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F
"A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F
"A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"  <<-- PROTOCOL IS ENG NOT ENGFRE, EXP is on Dubbing_Radio_F

"A3\Dubbing_Radio_F\data\VR\Male01PERVR\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"  
"A3\Dubbing_Radio_F\data\VR\Male01GREVR\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\VR\Male01ENGVR\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

Regarding "What time :D i have my beef hoola hoops ready."...I was worried this was some seriously kinky sh**, but I googled it and see its your preferred snack.  LOL.

 

Man, I love that episode of South Park, and one of the greatest moments was when your avatar flicked the cheeto off his chest...Brilliant!

 

And your code is brilliant too, so thanks again.

  • Like 2

Share this post


Link to post
Share on other sites

 

Run from debugConsole in mission preview. Careful ive tried to seperate the sounds out a little but things like CfgSentences comes back with nearly 5000 clips and can lag things out a bit due to the number of controls created. I have also not taken for granted file extensions and check, if a sound does not supply one, via loadfile, so will spam your RPT with some warning messages.

Tis what it is a test script.

LARs_fnc_findGameSounds = {
    if !( canSuspend ) exitWith { _this spawn LARs_fnc_findGameSounds };

    disableSerialization;
    private [ "_color", "_total", "_totalIndex", "_stxt", "_display", "_ctrlGrp" ];
    params[ "_cfg" ];

    _fnc_getColor = {
        _r = linearConversion[ 0, _total, _totalIndex, 1, 0 ];
        _g = linearConversion[ 0, _total, _totalIndex, 0, 1 ];
        _color = [ _r, _g, 0, 1 ] call BIS_fnc_colorRGBAtoHTML;
    };

    _fnc_createProgress = {

        createDialog "RscDisplayNotFreezeBig";
        waitUntil { _display = findDisplay 100002; !isNull _display };

        {
            _ctrl = _display displayCtrl _x;
            _ctrl ctrlSetPosition [ 0, 0, 0, 0 ];
            _ctrl ctrlCommit 0;
        }forEach [ 101, 1080, 1081, 1082, 1083 ];

        _stxt = _display ctrlCreate [ "RscStructuredText", 1000 ];
        _stxt ctrlSetPosition [ 0, -0.13, 1, 0.1 ];
        _stxt ctrlCommit 0;
    };

    _fnc_working = {
        params[ "_count", "_msg" ];
        _msg params[ "_prefix", "_suffix" ];

        _msg = format[ "<t color='%1'>%2</t>", _color, _prefix ];

        for "_i" from 0 to ( _count % 30 ) do {
            _msg = format[ "%1.", _msg ];
        };

        _msg = format[ "%1<br/>%2/%3 %4<br/>", _msg, _totalIndex, _total, _suffix ];
        _stxt ctrlSetStructuredText parseText _msg;

    };

    _fnc_isSound = {
        params[ "_value" ];

        if ( toLower( _value select [ 0, 6 ] ) isEqualTo "str_a3" ) then {
            _value = localize _value;
        };
        if ( _value isEqualTo "" ) exitWith {};

        if ( _value find "\" > -1 ) then {
            _value = toLower _value;
            {
                _tmp = _value splitString _x;
                {
                    _part = _x;
                    if ( _part find "." > -1 ) then {
                        {
                            if( _part select [ (( count _part ) -4 ), 4 ] isEqualTo _x ) exitWith {
                                _nul = _cfgSounds pushBackUnique [ _part, _part, _part ];
                            };
                        }forEach[ ".wss", ".ogg" ];
                    }else{
                        _file = _part call _fnc_getFileType;
                        if !( _file isEqualTo "" ) then {
                            _nul = _cfgSounds pushBackUnique [ _part, _file, _part ];
                        };
                    };
                }forEach _tmp;
            }forEach[ "'", " ", "," ];
        };
    };

    _fnc_getProperties = {
        params[ "_cfg" ];

        _properties = configProperties[ _cfg, "isText _x || isArray _x", false ];

        {

            [ _forEachIndex, [ "Searching config", "root classes" ] ] call _fnc_working;

            if ( configName _x find "sound" > -1 ) then {
                switch ( true ) do {
                    case ( isText _x ) : {
                        ( getText _x ) call _fnc_isSound;
                    };
                    case ( isArray _x ) : {
                        {
                            if ( _x isEqualType "" ) then {
                                _x call _fnc_isSound;
                            };
                        }forEach getArray( _x );
                    };
                };
            };
        }forEach _properties;
    };

    _fnc_getClasses = {
        params[ "_cfg", [ "_root", true ] ];

        if ( { toLower _x in [ "cfgmusic", "cfgradio", "cfgsounds", "cfgsfx", "cfgsentences", "cfgsoundshaders" ] }count ( [ _cfg, [] ] call BIS_fnc_configPath ) > 0  ) exitWith {};

        _classes = ( "true" configClasses _cfg );
        if ( _root ) then {
            _total = count _classes;
            _cfg call _fnc_getProperties;
        };

        {
            if ( _root ) then {
                _r = linearConversion[ 0, _total, _forEachIndex, 1, 0 ];
                _g = linearConversion[ 0, _total, _forEachIndex, 0, 1 ];
                _color = [ _r, _g, 0, 1 ] call BIS_fnc_colorRGBAtoHTML;
                _totalIndex = _forEachIndex;
            };

            _x call _fnc_getProperties;
            [ _x, false ] call _fnc_getClasses;
        }forEach _classes;
    };

    _fnc_defaultSounds = {
        private[ "_cfg" ];
        
        comment"//CfgMusic + CfgRadio";
        {
            _cfgSounds = LARs_configSounds select _forEachIndex;
            _childClasses = ( "true" configClasses( configFile >> _x ) );
            _total = count _childClasses;
            _baseConfig = _x;
            {
                _totalIndex = _forEachIndex;
                call _fnc_getColor;
                [ _forEachIndex, [ format[ "Searching %1", _baseConfig ], "root classes" ] ] call _fnc_working;
                _sound = getArray( _x >> "sound" ) select 0;
                _nul = _cfgSounds pushBackUnique [ configName _x, _sound, getText( _x >> ( [ "name", "title" ] select ( _baseConfig isEqualTo "CfgRadio" )) ) ];
            }forEach _childClasses;
        }forEach[ "CfgRadio", "CfgMusic" ];
        
        comment"//CfgSounds";
        _cfgSounds = LARs_configSounds select 2;
        _childClasses = ( "true" configClasses( configFile >> "CfgSounds" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            [ _forEachIndex, [ format[ "Searching %1", "CfgSounds" ], "root classes" ] ] call _fnc_working;
            _tmp = getArray( _x >> "sound" ) select 0;
            if !( isNil "_tmp" ) then {
                _file = _tmp call _fnc_getFileType;
                if !( _file isEqualTo "" ) then {
                    _nul = _cfgSounds pushBackUnique [ configName _x, _file, getText( _x >> "name" ) ];
                };
            };
        }forEach _childClasses;

        comment"//CfgSfx";
        _cfgSounds = LARs_configSounds select 3;
        _childClasses = ( "true" configClasses( configFile >> "CfgSfx" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            [ _forEachIndex, [ format[ "Searching %1", "CfgSfx" ], "root classes" ] ] call _fnc_working;
            _cfg = _x;
            _cfgName = configName _x;
            if ( isArray( _cfg >> "sounds" ) ) then {
                {
                    _tmp = getArray( _cfg >> _x ) select 0;
                    _file = _tmp call _fnc_getFileType;
                    if !( _file isEqualTo "" ) then {
                        _nul = _cfgSounds pushBackUnique [ _cfgName, _file, _cfgName ];
                    };
                }forEach getArray( _cfg >> "sounds" );
            }else{
                {
                    _tmp = getArray( _x ) select 0;
                    _file = _tmp call _fnc_getFileType;
                    if !( _file isEqualTo "" ) then {
                        _nul = _cfgSounds pushBackUnique [ _cfgName, _file, _cfgName ];
                    };
                }forEach configProperties[ _cfg, "isArray( _x )", false ];
            };
        }forEach _childClasses;


        comment"//CfgSentences";
        _cfgSounds = LARs_configSounds select 4;
        _childClasses = ( "true" configClasses( configFile >> "CfgSentences" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            {
                {
                    [ _forEachIndex, [ format[ "Searching %1", "CfgSentences" ], "root classes" ] ] call _fnc_working;
                    _cfgName = configName _x;
                    _file = getArray( _x >> "speech" ) select 0;
                    if !( isNil "_file" ) then {
                        _text = getText( _x >> "text" );
                        _nul = _cfgSounds pushBackUnique [ _cfgName, _file, _text ];
                    };
                }forEach ( "true" configClasses( _x >> "Sentences" ) );
            }forEach ( "true" configClasses( _x ) );
        }forEach _childClasses;

        comment"//CfgSoundShaders";
        _cfgSounds = LARs_configSounds select 5;
        _childClasses = ( "true" configClasses( configFile >> "CfgSoundShaders" ) );
        _total = count _childClasses;
        {
            _totalIndex = _forEachIndex;
            call _fnc_getColor;
            _cfgName = configName _x;
            {
                [ _forEachIndex, [ format[ "Searching %1", "CfgSoundShaders" ], "root classes" ] ] call _fnc_working;
                _tmp = _x select 0;
                _file = _tmp call _fnc_getFileType;
                if !( _file isEqualTo "" ) then {
                    _nul = _cfgSounds pushBackUnique [ format[ "%1_%2", _cfgName, _forEachIndex ], _file, _cfgName ];
                };
            }forEach getArray( _x >> "samples" );
        }forEach _childClasses;
    };

    _fnc_getFileType = {
        private[ "_ext" ];
        params[ "_filepath" ];
        
        _ext = {
            _x params[ "_ext", "_type" ];
            _file = format[ "%1%2", _filepath, _ext ];
            _isType = loadFile _file;
            if ( _isType isEqualTo _type ) exitWith { _ext };
        }forEach[
            [ ".wss", "WSS0" ],
            [ ".ogg", "OggS" ]
        ];
        
        if ( !isNil "_ext" ) exitWith {
            format[ "%1%2", _filepath, _ext ];
        };
        
        ""
    };

    call _fnc_createProgress;

    if ( isNil "LARs_configSounds" ) then {
        LARs_configSounds = [ [], [], [], [], [], [] ];
        call _fnc_defaultSounds;
    };
    if ( !isNil "_cfg" ) then {
        if ( !isNil "LARs_lastConfigSound" ) then {
            if !( _cfg isEqualTo LARs_lastConfigSound ) then {
                LARs_lastConfigSound = _cfg;
            };
        }else{
            LARs_lastConfigSound = _cfg;
        };
        _nul = LARs_configSounds pushBack [];
        _cfgSounds = LARs_configSounds select 6;
        _cfg call _fnc_getClasses;
    };
    

    LARs_fnc_fillUI = {
        params[ "_index" ];
        
        LARs_soundMasterCtrls params[ "_display", "_ctrlGrp", "_stxt" ];
        
        if !( isNil "LARs_soundCtrls" ) then {
            {
                {
                    if ( !isNil "_x" || { !isNull _x } ) then {
                        ctrlDelete _x;
                    };
                }forEach _x;
            }forEach LARs_soundCtrls;
        };
        LARs_soundCtrls = [];
        
        _stxt ctrlSetStructuredText parseText "Please wait filling UI";

        _picHeight = 0.18;
        {
            _x params[ [ "_heading", "" ], [ "_file", "?" ], [ "_description", "" ] ];
            
            if ( _file select [ 0, 1 ] isEqualTo "\" ) then {
                _file = _file select [ 1, count _file ];
            };
            
            _picGrp = _display ctrlCreate [ "RscControlsGroup", 10010 + _forEachIndex, _ctrlGrp ];
            _picGrp ctrlSetPosition [ 0, _picHeight * _forEachIndex, 1, _picHeight ];
            _picGrp ctrlCommit 0;

            _pic = _display ctrlCreate [ "RscActivePictureKeepAspect", 50000 + _forEachIndex, _picGrp ];
            _pic ctrlSetPosition [ 0, 0, _picHeight, _picHeight ];
            _pic ctrlSetText "\a3\modules_f_curator\data\portraitsound_ca.paa";
            _pic buttonSetAction format[ "playSound3D[ %1, player ]; hint 'copied to clipboard'; copyToClipboard str %1", str _file ];
            _pic ctrlCommit 0;

            _sTxtDescription = _display ctrlCreate [ "RscStructuredText", 80000 + _forEachIndex, _picGrp ];
            _sTxtDescription ctrlSetPosition [ _picHeight, 0, 1-_picHeight, _picHeight ];
            _sTxtDescription ctrlSetStructuredText  parseText format[ "<t color='#FFFF0000'>%1<t/><br/><t color='#FFFFFFFF'>%2<t/><br/><t color='#FF0000FF'>%3<t/>", _heading, _file, _description ];
            _sTxtDescription ctrlCommit 0;
            
            _nul = LARs_soundCtrls pushBack [ _sTxtDescription, _pic, _picGrp ];
        }forEach ( LARs_configSounds select _index );

        _stxt ctrlSetStructuredText parseText "Click speaker icon to preview sound and copy it to the clipboard";

    };
    
    if ( count LARs_configSounds > 0 ) then {
        
        _ctrlGrp = _display ctrlCreate [ "RscControlsGroup", 1001 ];
        _ctrlGrp ctrlSetPosition [ 0, 0, 1, 1 ];
        _ctrlGrp ctrlCommit 0;
        
        _titles = [ "CfgRadio", "CfgMusic", "CfgSounds", "CfgSfx", "CfgSentences", "CfgSoundShaders" ];
        if !( isNil "LARs_lastConfigSound" ) then {
            _nul = _titles pushBack configName LARs_lastConfigSound;
        };
        
        _btnLength = 1/count _titles;
        {
            _title = _titles select _forEachIndex;
            
            _btn = _display ctrlCreate [ "RscButton", 500 + _forEachIndex ];
            _btn ctrlSetPosition [ _btnLength * _forEachIndex, -0.03, _btnLength, 0.03 ];
            _btn ctrlSetText _title;
            _btn buttonSetAction format[ "[ %1 ] call LARs_fnc_fillUI", _forEachIndex ];
            _btn ctrlCommit 0;
        }forEach LARs_configSounds;
        
        LARs_soundMasterCtrls = [ _display, _ctrlGrp, _stxt ];
        
        [ 0 ] call LARs_fnc_fillUI;
    };

};

[] call LARs_fnc_findGameSounds;

 

holy shit

 

+1

  • Like 4

Share this post


Link to post
Share on other sites

I think you can use mikero tools and and instruct it to extract only certain files, like sound files for example.

Share this post


Link to post
Share on other sites

@Larrow hey buddy.  Any chance you could modify your above tool to filter to one language only?  Just ENG would be fine.  It takes between 5 and 10 minutes to load as is, and we really only need to see one language.  If you want the path for the French or Chinese version of the command, the user can use my example below which shows how directories are structured per each language.

"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\VR\Male01PERVR\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\VR\Male01GREVR\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
"A3\Dubbing_Radio_F\data\VR\Male01ENGVR\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

If its a hassle don't bother, but it would be a time saver.  Thanks for listening.

Share this post


Link to post
Share on other sites
On 10/12/2016 at 8:57 PM, johnnyboy said:

These look like exactly what I'm looking for, except they aren't playable.  I tried both .ogg and .wss as follows using say3d and playsound3d, and none worked.

I know this is old but this UI tool is too good. I'm trying to figure out how to play sounds and am having the same issue, any command I try say3D playSound, all come back with "not found".

How did you end up getting this to work? I use the UI tool, find the sound, 

 

playSound ["a3\dubbing_f_beta\mptype_defense\01_BLUFOR\mptype_defense_01_blufor_BHQ_7.ogg"];

 

and then activate my trigger and same error everytime.

 

Any help is greatly appreciated 🙂

Share this post


Link to post
Share on other sites
23 minutes ago, SupremeTDM said:

playSound ["a3\dubbing_f_beta\mptype_defense\01_BLUFOR\mptype_defense_01_blufor_BHQ_7.ogg"];

See if it works for you like the following, just put it your desired path and sound file name.

_s ='a3\dubbing_radio_f\data\eng\male01eng\radioprotocoleng\normal\230_genericradiomessages\gencmddefend1.ogg';
playSound3D [_s,player, false, getPosASL player];

 

Share this post


Link to post
Share on other sites
2 hours ago, johnnyboy said:

'a3\dubbing_radio_f\data\eng\male01eng\radioprotocoleng\normal\230_genericradiomessages\gencmddefend1.ogg'

where did you find this? and how did you know this is the correct file? As in, ive checked cfgSounds, used that UI tool, etc. and I can never tell what the exact soundName im supposed to use is. If you could walk me through finding the sound I need, I'd be grateful. 

 

I have a task "radio alpha for all clear", I want the player to then radio alpha and get a radio response from a loitering vtol overhead. Player calls in, vtol says (not voiced by player) "Area Clear" (or whatever sound file I like) and the task completes. Thanks for the help, sorry if im making it confusing

 

edit: I just cannot figure this out. I am trying every sound name I can, 

 

sound[] = {"\a3\dubbing_f_tacops\to_c01_m01\002_br_briefing_b\to_c01_m01_002_br_briefing_b_OLYMPOS_17.ogg",1,1};

 

that is from cfgSounds, then I try

 

_s ="\a3\dubbing_f_tacops\to_c01_m01\002_br_briefing_b\to_c01_m01_002_br_briefing_b_OLYMPOS_17.ogg"; playSound [_s,2,0];

 

and I get "sound not found". The only way I've got any sound to play was copy pasting exactly what you replied with but that gives me the wrong voice line and its from the player so I tried to change what is said and have it just be played as a sound, no spoken by player, and all I get is "sound not found". Thanks again for any help, this is frustrating to say the least

Edited by SupremeTDM
further errors

Share this post


Link to post
Share on other sites

I think with playSound, you have to know what the sound is named in the config (a single word enclosed with double quotes).  With playSound3D  you can provide the full path name to the sound file.  I just tried your Olympos sound file path and I hear it perfectly using playSound3D (not playSound):

_s = '\a3\dubbing_f_tacops\to_c01_m01\002_br_briefing_b\to_c01_m01_002_br_briefing_b_OLYMPOS_17.ogg'; 
playSound3D [_s,player, false, getPosASL player]

As for finding the sound you want to use, its brutally time consuming.  I have used that utility above and played a shitload of them and capture the ones I think might be useful to me.  With that utility above, there is a button to copy the sound file path string to clipboard.  So when you hear one you want, you click that button to capture the string and paste in an editor and note what the words said were.  Tedious.  I know how to dump these file names, but the names aren't descriptive enough to know what the actual text being said is.  I've been meaning to ask on these forums how to dump the file names AND the string table english text that gets displayed when the game engine uses the sound file.  There must be a relationship between the string table text and the sound file in the config that is not obvious when you browse the config file.  

 

I feel your pain!

  • Like 1

Share this post


Link to post
Share on other sites
11 hours ago, johnnyboy said:

I feel your pain!

thanks for the replys johnnyBoy, good to know I'm not alone. I am still at a loss with this and made a new topic to be more specific.

 

But essentially I have the file I want

 

configfile >> "RadioProtocolENG" >> "SentClearDefault" >> "Area_clear_1"

 

and also learned about sideRadio which is the command that fits my scenario much better I  think but I still have no success getting it to play. 

Googling "sound not found" lead me to extracting the pbo dubbing_radio_f_data_eng.pbo and so now I have the literal audio of the "area clear" i want but again, I have no idea what to really do with it lol.

 

I've tried player sideRadio "Area_clear_1";  and I don't get an error or anything, just nothing happens. I tried some variations on the wiki [west, "Base"] sideRadio configName selectRandom ("true" configClasses (configFile >> "CfgRadio"));  but I dont really understand what its asking for so Ive plugged in many variations of "RadioProtocolENG", "SentClearDefault", "Area_clear_1" and no luck.

I dont think  I understand the pbo stuff well enough but I copied the folder that has the sound I want to use into my mission folder, that way when I try to call it in my mission the audio is actually in there.

 

Thanks again for any help, and as you said, this has become by far the most tedious part of my mission

Edited by SupremeTDM
clarity

Share this post


Link to post
Share on other sites

For Area Clear, use this:

_unit = player; 
_s = "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Stealth\110_Com_Announce\AreaClear.ogg"; 
playSound3D [_s, _unit, false, getPosASL _unit, 1, 1, 0]; 

Also, see my function called JBOY_Speak that allows you to have a unit say most any of the unit command and response voice files that a unit can say (like Frag Out, Return To Formation, Roger, etc.).  I use it all the time in my scripts to try and find context specific voices to add immersion.  

 

The other cool thing about jboy_speak is that if you call the function passing in "Halt", it will say that voice file in whatever language the speaker of the unit is (so it could be English, French, Chinese, Persian, etc.).  Actually, I need to update that demo mission with latest jboy_speak code, as it now supports nearly all the useful command/responses.

 

SideRadio command is not for these unit voice command/responses.  It's reading from a different sound config (configRadio I think...not sure though).  The unit command/responses are in RadioProtocol config (I think).

Share this post


Link to post
Share on other sites
1 hour ago, johnnyboy said:

Also, see my function called JBOY_Speak

Ive read many of your post over the last day and found that but honestly didn't know what I was looking at or how to use it for my need. It looked like overkill for my need of a single command being used but I'll try anything else at this point.

 

And how do you know where sideRadio is calling from? this is the tedious part, each command seems to want a different location for the same audio file I'm trying to use or obviously Im just not fully understanding something.

 

And thank you for this

_unit = player; _s = "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Stealth\110_Com_Announce\AreaClear.ogg"; playSound3D [_s, _unit, false, getPosASL _unit, 1, 1, 0];

but it still is just spoken by the player with playSound3D and I need it as a response over the radio from another unit (loitering vtol overhead), hence why I thought sideRadio is what I want but that never got me anywhere.

 

thanks again for your time johnny

Share this post


Link to post
Share on other sites

Hey dude, mostly good news, I cracked the code!

todd sideRadio "SentClearDefault";

If you open the config in the debug console and scroll down to RadioProtocolENG and expand it, you will then see the "words" that work sideRadio, groupRadio, vehicleRadio, etc.

Some sounds only have one version, some have more than one version.  So the example above "SentClearDefault" has two versions of the sound:  "Clear" and "Area Clear", of which the command above will pick one randomly to play.  I don't know how to get sideRadio to choose just "Area Clear". Below is  a screenshot of this part of config open in console.  When you use the radio commands you get the radio squelch at beginning and end of sound file.  The config is pretty easy to browse, and find other sounds you might want.  I wish I had known this years ago!  🙂

radio-Config.jpg

  • Like 1

Share this post


Link to post
Share on other sites
1 hour ago, johnnyboy said:

I cracked the code!

HA! You did, thank you so much.

 

how did you know to use "SentClearDefault" instead of a specific line like "Area_clear_1"? this seems to be the confusion where I got stuck.

I had found exactly that in the config which is why i was trying player sideRadio "Area_clear_1"; Nothing on the wiki/syntax seemed to suggest the random selection part so I was just using the specific line I wanted.

 

I would prefer the Area clear 1 but at this point I will not be picky as I was able to assign it to my vtol pilot and its perfect! 

Spent like 20 hours trying to get two words to play over the radio but here we are lol. 

Share this post


Link to post
Share on other sites
1 minute ago, SupremeTDM said:

how did you know to use "SentClearDefault" instead of a specific line like "Area_clear_1"?

Lucky experimentation.  I knew some string in there had to work.  I did try Area_clear_1 also to see if you could get the specific "Area Clear" version, but it doesn't work.  

 

But now we know, and  the next time we need a particular voice file for sideRadio, it will be much easier to find.

Share this post


Link to post
Share on other sites
12 minutes ago, johnnyboy said:

But now we know

Exactly! this is why its so frustrating but also so rewarding because I'll never have to struggle through that again. Im already experimenting with more dynamic radio comms now that I know how they work a bit better.

"SentCmdSupportFar"
"SentRequestAccomplishedSGSupplyDrop" (i had a huron cargo drop already but now I can add immersion to it as well )"
"SentSupportRequestRGUAV"

 

feels defeating knowing that was just one of the variations I happened to not try. You feel like you try everything and it was as simple as pasting in a different word lol but im sure many can relate.

 

thanks again johnnyboy

Share this post


Link to post
Share on other sites
2 minutes ago, SupremeTDM said:

thanks again johnnyboy

No problem dude.  I'm sure I'll need this myself as I try maximize use of vanilla sounds wherever context appropriate.  Welcome to the forums, and the whacky world of arma editing.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×