public void FromPacketToAudioDataInt16(GamePacket packet, ref VoicePacketInfo info, byte[] out_audioData, int out_audioDataOffset, out int dataCount)
    {
        //reads audio data length
        int count = packet.ReadInt();

        //Restarts packet buffer to use
        decompressBuffer.ResetSeekLength();

        //fills buffer with only audio data from given packet
        decompressBuffer.WriteByteData(packet.Data, packet.CurrentSeek, count);

        EVoiceResult res = EVoiceResult.k_EVoiceResultUnsupportedCodec;

        //number of bytes written
        uint b = 0;

        //audio data is decompressed
        res = SteamUser.DecompressVoice(decompressBuffer.Data, (uint)decompressBuffer.CurrentLength, out_audioData, (uint)out_audioData.Length, out b, info.Frequency);

        dataCount = (int)b;

        //if an error occurred packet is invalid
        if (res != EVoiceResult.k_EVoiceResultOK)
        {
            info.ValidPacketInfo = false;
        }
    }
Esempio n. 2
0
        void PlaySoundFromNetworkData(ulong talkerSteamID, byte[] networkBuf, uint networkSize, byte[] inputBuffer, byte[] decompressBuffer)
        {
            if (networkSize > 0)
            {
                DateTime?dt;
                if (!lastPacket.TryGetValue(talkerSteamID, out dt))
                {
                    lastPacket.TryAdd(talkerSteamID, null);
                    UserVoiceEnabled(talkerSteamID);
                }

                var flags = (ControlByteFlags)networkBuf[0];
                if (networkSize > 1)
                {
                    var waveProvider = mixerWrapper.GetWaveProvider(talkerSteamID);
                    Array.Copy(networkBuf, 1, inputBuffer, 0, networkSize - 1);

                    uint decompressSize;
                    if (
                        SteamUser.DecompressVoice(inputBuffer, networkSize - 1, decompressBuffer, (uint)decompressBuffer.Length, out decompressSize,
                                                  sampleRate) == EVoiceResult.k_EVoiceResultOK)
                    {
                        lastPacket[talkerSteamID] = DateTime.Now;
                        if ((flags & ControlByteFlags.IsFirst) > 0)
                        {
                            waveProvider.AddSamples(silencer, 0, silencer.Length); // add some delay to minimize jitter on first packet
                            UserStartsTalking(talkerSteamID);
                        }

                        waveProvider.AddSamples(decompressBuffer, 0, (int)decompressSize);
                    }
                }
            }
        }
Esempio n. 3
0
        bool PlayVoip(byte[] voipPacket)
        {
            byte[] voipBuffer = new byte[11025 * 2];
            uint   byteLength;

            if (SteamUser.DecompressVoice(voipPacket, (uint)voipPacket.Length, voipBuffer, (uint)voipBuffer.Length, out byteLength, 11025) == EVoiceResult.k_EVoiceResultOK && byteLength > 0)
            {
                AudioSource source;
                if (!m_VoiceLoopback)
                {
                    m_VoiceLoopback = new GameObject("Voice Loopback");
                    source          = m_VoiceLoopback.AddComponent <AudioSource>();
                    DontDestroyOnLoad(source.gameObject);
                    source.clip   = AudioClip.Create("Voice Clip", 11025, 1, 11025, false);
                    source.volume = 1.0f;
                }
                else
                {
                    source = m_VoiceLoopback.GetComponent <AudioSource>();
                }

                float[] voip = new float[11025];
                for (int i = 0; i < voip.Length; ++i)
                {
                    voip[i] = (short)(voipBuffer[i * 2] | voipBuffer[i * 2 + 1] << 8) / 32768.0f;
                }
                source.clip.SetData(voip, 0);
                source.Play();
                return(true);
            }
            return(false);
        }
Esempio n. 4
0
        public bool GetAvailableVoice(out byte[] bufferCompressed, out byte[] bufferUncompressed)
        {
            bufferCompressed   = null;
            bufferUncompressed = null;

            if (!SteamService.IsInitialized)
            {
                return(false);
            }

            if (!Recording)
            {
                return(false);
            }

            uint bytesAvailableCompressed   = 0;
            uint bytesAvailableUncompressed = 0;

            // find out if there's any recorded data
            EVoiceResult result = SteamUser.GetAvailableVoice(out bytesAvailableCompressed, out bytesAvailableUncompressed, 0);

            if (result == EVoiceResult.k_EVoiceResultNotRecording)
            {
                Recording = false;

                return(false);
            }

            // if there's recorded data
            if (result == EVoiceResult.k_EVoiceResultOK && bytesAvailableCompressed > 0)
            {
                // retrieve recorded data
                uint bytesWrittenCompressed   = 0;
                uint bytesWrittenUncompressed = 0;

                // we only care about the compressed data because that's what we'll network across
                result = SteamUser.GetVoice(true, _voiceBufferCompressed, (uint)_voiceBufferCompressed.Length, out bytesWrittenCompressed, false, null, 0, out bytesWrittenUncompressed, 0);

                // did we get it successfully?
                if (result == EVoiceResult.k_EVoiceResultOK && bytesWrittenCompressed > 0)
                {
                    result = SteamUser.DecompressVoice(_voiceBufferCompressed, bytesWrittenCompressed, _voiceBufferUncompressed, (uint)_voiceBufferUncompressed.Length, out bytesWrittenUncompressed, (uint)11025);

                    // was the decompress OK?
                    if (result == EVoiceResult.k_EVoiceResultOK && bytesWrittenUncompressed > 0)
                    {
                        bufferCompressed   = _voiceBufferCompressed.Take((int)bytesWrittenCompressed).ToArray();
                        bufferUncompressed = _voiceBufferUncompressed.Take((int)bytesWrittenUncompressed).ToArray();

                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 5
0
        protected unsafe override void OnPlayerPacketReceived(IPlayer player, IBasePacket packet)
        {
            if (!(packet is CompressedVoiceData voicePacket))
            {
                return;
            }

            if (Game.IsHost)
            {
                var packetToSend = PacketUtility.TakePacket <CompressedVoiceData>();
                packetToSend.SetData(voicePacket.Data, voicePacket.DataLength);
                packetToSend.ClientIndex = player.ClientIndex;
                Server.GameServer.Instance.Socket.BroadcastPacket(packetToSend);
            }
            else
            {
                var vol = DevConsole.GetVariable <float>("audio.voiceoutput");
                if (vol == 0)
                {
                    return;
                }

                var clientIndex = voicePacket.ClientIndex;

                if (clientIndex == Game.ClientIndex && !_loopback)
                {
                    return;
                }

                int uncompressedDataLength = 0;
                var speakingPlayer         = Game.PlayerManager.FindPlayer(clientIndex);
                fixed(byte *src = voicePacket.Data)
                {
                    fixed(byte *dst = _data)
                    {
                        uncompressedDataLength = SteamUser.DecompressVoice((IntPtr)src, voicePacket.DataLength, (IntPtr)dst, _data.Length);
                    }
                }

                if (uncompressedDataLength == 0 || speakingPlayer == null)
                {
                    return;
                }

                throw new System.NotImplementedException();
                // _data to audio..

                //UnityEngine.Debug.Log($"size: {data.Length} - group: {getChannelGroupResult} - create: {createSoundResult} - play: {playSoundResult}");
            }
        }
Esempio n. 6
0
    public void DataReceived(byte[] data, int size)
    {
        uint num = 0u;

        if (SteamUser.DecompressVoice(data, (uint)size, this.vc_decomp, (uint)this.vc_decomp.Length, out num, 11025u) == EVoiceResult.k_EVoiceResultOK && num > 0u)
        {
            int num2 = (int)(num / 2u);
            if (num2 >= this.vc_pcm.Length)
            {
                Array.Resize <short>(ref this.vc_pcm, num2);
            }
            Array.Clear(this.vc_pcm, 0, this.vc_pcm.Length);
            Buffer.BlockCopy(this.vc_decomp, 0, this.vc_pcm, 0, num2 * 2);
            float a    = 2.14748365E+09f;
            float a2   = -2.14748365E+09f;
            uint  num3 = 0u;
            while ((ulong)num3 < (ulong)((long)num2))
            {
                a     = Mathf.Min(a, (float)this.vc_pcm[(int)((UIntPtr)num3)]);
                a2    = Mathf.Max(a2, (float)this.vc_pcm[(int)((UIntPtr)num3)]);
                num3 += 1u;
            }
            float[] buffer = CoopSteamVoicePlayer.GetBuffer(num2);
            uint    num4   = 0u;
            while ((ulong)num4 < (ulong)((long)num2))
            {
                buffer[(int)((UIntPtr)num4)] = Mathf.Clamp((float)this.vc_pcm[(int)((UIntPtr)num4)] * PlayerPreferences.MicrophoneVolume / 32767f, -1f, 1f);
                num4 += 1u;
            }
            this.clip.SetData(buffer, this.samplesReceived % 110250);
            this.samplesReceived += num2;
            if (this.audio && !this.audio.isPlaying)
            {
                if (this.playbackDelay > 0)
                {
                    if (--this.playbackDelay == 0)
                    {
                        this.audio.volume = CoopSteamVoicePlayer.GLOBAL_VOLUME;
                        this.audio.Play();
                    }
                }
                else
                {
                    this.playbackDelay = 2;
                }
            }
        }
    }
Esempio n. 7
0
        public bool Play(AudioSource source)
        {
            byte[] voipBuffer = new byte[11025 * 2];
            uint   byteLength;

            if (SteamUser.DecompressVoice(voip, (uint)voip.Length, voipBuffer, (uint)voipBuffer.Length, out byteLength, 11025) == EVoiceResult.k_EVoiceResultOK && byteLength > 0)
            {
                float[] v = new float[11025];
                for (int i = 0; i < v.Length; ++i)
                {
                    v[i] = (short)(voipBuffer[i * 2] | voipBuffer[i * 2 + 1] << 8) / 32768.0f;
                }
                source.clip.SetData(v, 0);
                source.outputAudioMixerGroup = Utils.Assets.AudioGroup;
                source.Play();
                return(true);
            }
            return(false);
        }
Esempio n. 8
0
        /// <summary>
        /// Players a recieved Steam Voice package through the <see cref="OutputSource"/> <see cref="AudioSource"/>.
        /// </summary>
        /// <param name="buffer"></param>
        public void PlayVoiceData(byte[] buffer)
        {
            uint bytesWritten;

            byte[] destBuffer = new byte[20000];
            var    result     = SteamUser.DecompressVoice(buffer, (uint)buffer.Length, destBuffer, (uint)destBuffer.Length, out bytesWritten, (uint)sampleRate);
            var    timeStamp  = DateTime.Now;

            if (result == EVoiceResult.k_EVoiceResultBufferTooSmall)
            {
                destBuffer = new byte[bytesWritten];
                result     = SteamUser.DecompressVoice(buffer, (uint)buffer.Length, destBuffer, (uint)destBuffer.Length, out bytesWritten, (uint)sampleRate);
            }

            //Handle audio encoding result == EVoiceResult.k_EVoiceResultOK &&
            if (bytesWritten > 0)
            {
                if (useAudioStreaming)
                {
                    //We are currently playing so enqueue this data and let the reader handle it
                    for (int i = 0; i < bytesWritten; i += 2)
                    {
                        audioBuffer.Enqueue((short)(destBuffer[i] | destBuffer[i + 1] << 8) / 32768f);
                    }
                }
                else
                {
                    float[] clipData   = new float[2 + (bytesWritten / 2)];
                    var     clipSample = 1;
                    for (int i = 0; i < bytesWritten; i += 2)
                    {
                        clipData[clipSample] = (short)(destBuffer[i] | destBuffer[i + 1] << 8) / 32768f;
                        clipSample++;
                    }
                    clipSample += 1;

                    if (!OutputSource.isPlaying && OutputSource.clip != null)
                    {
                        Destroy(OutputSource.clip);
                        OutputSource.clip = AudioClip.Create("VOICE", clipSample, 1, (int)sampleRate, false);
                        OutputSource.clip.SetData(clipData, 0);
                        OutputSource.Play();
                    }
                    else
                    {
                        var nClip = AudioClip.Create("VOICE " + timeStamp.ToBinary().ToString(), clipSample, 1, (int)sampleRate, false);
                        nClip.SetData(clipData, 0);
                        clipBuffer.Enqueue(nClip);
                    }
                }

                var clip = (DateTime.Now - timeStamp).TotalMilliseconds;
                if (clip > encodingTime)
                {
                    encodingTime = clip;
                }
            }
            else
            {
                Debug.LogWarning("Unknown result message: " + result.ToString());
            }
        }
    public void RenderOnGUI()
    {
        GUILayout.BeginArea(new Rect(Screen.width - 200, 0, 200, Screen.height));
        GUILayout.Label("Variables:");
        GUILayout.Label("m_Ticket: " + m_Ticket);
        GUILayout.Label("m_pcbTicket: " + m_pcbTicket);
        GUILayout.Label("m_HAuthTicket: " + m_HAuthTicket);
        GUILayout.Label("m_VoiceLoopback: " + m_VoiceLoopback);
        GUILayout.EndArea();

        GUILayout.BeginVertical("box");
        m_ScrollPos = GUILayout.BeginScrollView(m_ScrollPos, GUILayout.Width(Screen.width - 215), GUILayout.Height(Screen.height - 33));

        GUILayout.Label("GetHSteamUser() : " + SteamUser.GetHSteamUser());

        GUILayout.Label("BLoggedOn() : " + SteamUser.BLoggedOn());

        GUILayout.Label("GetSteamID() : " + SteamUser.GetSteamID());

        //SteamUser.InitiateGameConnection() // N/A - Too Hard to test like this.

        //SteamUser.TerminateGameConnection() // ^

        //SteamUser.TrackAppUsageEvent() // Legacy function with no documentation

        {
            string Buffer;
            bool   ret = SteamUser.GetUserDataFolder(out Buffer, 260);
            GUILayout.Label("GetUserDataFolder(out Buffer, 260) : " + ret + " -- " + Buffer);
        }

        if (GUILayout.Button("StartVoiceRecording()"))
        {
            SteamUser.StartVoiceRecording();
            print("SteamUser.StartVoiceRecording()");
        }

        if (GUILayout.Button("StopVoiceRecording()"))
        {
            SteamUser.StopVoiceRecording();
            print("SteamUser.StopVoiceRecording()");
        }

        {
            uint         Compressed;
            EVoiceResult ret = SteamUser.GetAvailableVoice(out Compressed);
            GUILayout.Label("GetAvailableVoice(out Compressed) : " + ret + " -- " + Compressed);

            if (ret == EVoiceResult.k_EVoiceResultOK && Compressed > 0)
            {
                byte[] DestBuffer = new byte[1024];
                uint   BytesWritten;
                ret = SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten);
                //print("SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten) : " + ret + " -- " + BytesWritten);

                if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten > 0)
                {
                    byte[] DestBuffer2 = new byte[11025 * 2];
                    uint   BytesWritten2;
                    ret = SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025);
                    //print("SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025) - " + ret + " -- " + BytesWritten2);

                    if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten2 > 0)
                    {
                        AudioSource source;
                        if (!m_VoiceLoopback)
                        {
                            m_VoiceLoopback = new GameObject("Voice Loopback");
                            source          = m_VoiceLoopback.AddComponent <AudioSource>();
                            source.clip     = AudioClip.Create("Testing!", 11025, 1, 11025, false);
                        }
                        else
                        {
                            source = m_VoiceLoopback.GetComponent <AudioSource>();
                        }

                        float[] test = new float[11025];
                        for (int i = 0; i < test.Length; ++i)
                        {
                            test[i] = (short)(DestBuffer2[i * 2] | DestBuffer2[i * 2 + 1] << 8) / 32768.0f;
                        }
                        source.clip.SetData(test, 0);
                        source.Play();
                    }
                }
            }
        }

        GUILayout.Label("GetVoiceOptimalSampleRate() : " + SteamUser.GetVoiceOptimalSampleRate());

        {
            if (GUILayout.Button("GetAuthSessionTicket(Ticket, 1024, out pcbTicket)"))
            {
                m_Ticket      = new byte[1024];
                m_HAuthTicket = SteamUser.GetAuthSessionTicket(m_Ticket, 1024, out m_pcbTicket);
                print("SteamUser.GetAuthSessionTicket(Ticket, 1024, out pcbTicket) - " + m_HAuthTicket + " -- " + m_pcbTicket);
            }

            if (GUILayout.Button("BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID())"))
            {
                if (m_HAuthTicket != HAuthTicket.Invalid && m_pcbTicket != 0)
                {
                    EBeginAuthSessionResult ret = SteamUser.BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID());
                    print("SteamUser.BeginAuthSession(m_Ticket, " + (int)m_pcbTicket + ", " + SteamUser.GetSteamID() + ") - " + ret);
                }
                else
                {
                    print("Call GetAuthSessionTicket first!");
                }
            }
        }

        if (GUILayout.Button("EndAuthSession(SteamUser.GetSteamID())"))
        {
            SteamUser.EndAuthSession(SteamUser.GetSteamID());
            print("SteamUser.EndAuthSession(" + SteamUser.GetSteamID() + ")");
        }

        if (GUILayout.Button("CancelAuthTicket(m_HAuthTicket)"))
        {
            SteamUser.CancelAuthTicket(m_HAuthTicket);
            print("SteamUser.CancelAuthTicket(" + m_HAuthTicket + ")");
        }

        GUILayout.Label("UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID()) : " + SteamUser.UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID()));

        GUILayout.Label("BIsBehindNAT() : " + SteamUser.BIsBehindNAT());

        if (GUILayout.Button("AdvertiseGame(CSteamID.NonSteamGS, TestConstants.k_IpAdress127_0_0_1, TestConstants.k_Port27015)"))
        {
            SteamUser.AdvertiseGame(CSteamID.NonSteamGS, TestConstants.k_IpAdress127_0_0_1, TestConstants.k_Port27015);
            print("SteamUser.AdvertiseGame(" + CSteamID.NonSteamGS + ", " + TestConstants.k_IpAdress127_0_0_1 + ", " + TestConstants.k_Port27015 + ")");
        }

        if (GUILayout.Button("RequestEncryptedAppTicket(k_unSecretData, sizeof(uint))"))
        {
            byte[]         k_unSecretData = System.BitConverter.GetBytes(0x5444);
            SteamAPICall_t handle         = SteamUser.RequestEncryptedAppTicket(k_unSecretData, sizeof(uint));
            OnEncryptedAppTicketResponseCallResult.Set(handle);
            print("SteamUser.RequestEncryptedAppTicket(" + k_unSecretData + ", " + sizeof(uint) + ") : " + handle);
        }

        if (GUILayout.Button("GetEncryptedAppTicket(rgubTicket, 1024, out cubTicket)"))
        {
            byte[] rgubTicket = new byte[1024];
            uint   cubTicket;
            bool   ret = SteamUser.GetEncryptedAppTicket(rgubTicket, 1024, out cubTicket);
            print("SteamUser.GetEncryptedAppTicket(" + rgubTicket + ", " + 1024 + ", " + "out cubTicket" + ") : " + ret + " -- " + cubTicket);
        }

        // SpaceWar does not have trading cards, so this function will only ever return 0 and produce an annoying warning.
        if (GUILayout.Button("GetGameBadgeLevel(1, false)"))
        {
            int ret = SteamUser.GetGameBadgeLevel(1, false);
            print("SteamUser.GetGameBadgeLevel(" + 1 + ", " + false + ") : " + ret);
        }

        GUILayout.Label("GetPlayerSteamLevel() : " + SteamUser.GetPlayerSteamLevel());

        if (GUILayout.Button("RequestStoreAuthURL(\"https://steampowered.com\")"))
        {
            SteamAPICall_t handle = SteamUser.RequestStoreAuthURL("https://steampowered.com");
            OnStoreAuthURLResponseCallResult.Set(handle);
            print("SteamUser.RequestStoreAuthURL(" + "\"https://steampowered.com\"" + ") : " + handle);
        }

        GUILayout.Label("BIsPhoneVerified() : " + SteamUser.BIsPhoneVerified());

        GUILayout.Label("BIsTwoFactorEnabled() : " + SteamUser.BIsTwoFactorEnabled());

        GUILayout.Label("BIsPhoneIdentifying() : " + SteamUser.BIsPhoneIdentifying());

        GUILayout.Label("BIsPhoneRequiringVerification() : " + SteamUser.BIsPhoneRequiringVerification());

        if (GUILayout.Button("GetMarketEligibility()"))
        {
            SteamAPICall_t handle = SteamUser.GetMarketEligibility();
            OnMarketEligibilityResponseCallResult.Set(handle);
            print("SteamUser.GetMarketEligibility() : " + handle);
        }

        GUILayout.EndScrollView();
        GUILayout.EndVertical();
    }
    public void RenderOnGUI()
    {
        GUILayout.BeginArea(new Rect(Screen.width - 200, 0, 200, Screen.height));
        GUILayout.Label("m_HAuthTicket: " + m_HAuthTicket);
        GUILayout.Label("m_pcbTicket: " + m_pcbTicket);
        GUILayout.EndArea();

        GUILayout.Label("GetHSteamUser() : " + SteamUser.GetHSteamUser());
        GUILayout.Label("BLoggedOn() : " + SteamUser.BLoggedOn());
        GUILayout.Label("GetSteamID() : " + SteamUser.GetSteamID());

        //GUILayout.Label("InitiateGameConnection() : " + SteamUser.InitiateGameConnection()); // N/A - Too Hard to test like this.
        //GUILayout.Label("TerminateGameConnection() : " + SteamUser.TerminateGameConnection()); // ^
        //GUILayout.Label("TrackAppUsageEvent() : " + SteamUser.TrackAppUsageEvent()); // Legacy function with no documentation

        {
            string Buffer;
            bool   ret = SteamUser.GetUserDataFolder(out Buffer, 260);
            GUILayout.Label("GetUserDataFolder(out Buffer, 260) : " + ret + " -- " + Buffer);
        }

        if (GUILayout.Button("StartVoiceRecording()"))
        {
            SteamUser.StartVoiceRecording();
            print("SteamUser.StartVoiceRecording()");
        }

        if (GUILayout.Button("StopVoiceRecording()"))
        {
            SteamUser.StopVoiceRecording();
            print("SteamUser.StopVoiceRecording()");
        }

        {
            uint         Compressed;
            uint         Uncompressed;
            EVoiceResult ret = SteamUser.GetAvailableVoice(out Compressed, out Uncompressed, 11025);
            GUILayout.Label("GetAvailableVoice(out Compressed, out Uncompressed, 11025) : " + ret + " -- " + Compressed + " -- " + Uncompressed);

            if (ret == EVoiceResult.k_EVoiceResultOK && Compressed > 0)
            {
                byte[] DestBuffer             = new byte[1024];
                byte[] UncompressedDestBuffer = new byte[1024];
                uint   BytesWritten;
                uint   UncompressedBytesWritten;
                ret = SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten, true, UncompressedDestBuffer, (uint)DestBuffer.Length, out UncompressedBytesWritten, 11025);
                //print("SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten, true, UncompressedDestBuffer, (uint)DestBuffer.Length, out UncompressedBytesWritten, 11025) : " + ret + " -- " + BytesWritten + " -- " + UncompressedBytesWritten);

                if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten > 0)
                {
                    byte[] DestBuffer2 = new byte[11025 * 2];
                    uint   BytesWritten2;
                    ret = SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025);
                    //print("SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025) - " + ret + " -- " + BytesWritten2);

                    if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten2 > 0)
                    {
                        AudioSource source;
                        if (!m_VoiceLoopback)
                        {
                            m_VoiceLoopback = new GameObject("Voice Loopback");
                            source          = m_VoiceLoopback.AddComponent <AudioSource>();
                            source.clip     = AudioClip.Create("Testing!", 11025, 1, 11025, false, false);
                        }
                        else
                        {
                            source = m_VoiceLoopback.GetComponent <AudioSource>();
                        }

                        float[] test = new float[11025];
                        for (int i = 0; i < test.Length; ++i)
                        {
                            test[i] = (short)(DestBuffer2[i * 2] | DestBuffer2[i * 2 + 1] << 8) / 32768.0f;
                        }
                        source.clip.SetData(test, 0);
                        source.Play();
                    }
                }
            }
        }

        GUILayout.Label("GetVoiceOptimalSampleRate() : " + SteamUser.GetVoiceOptimalSampleRate());

        {
            if (GUILayout.Button("GetAuthSessionTicket(Ticket, 1024, out pcbTicket)"))
            {
                m_Ticket      = new byte[1024];
                m_HAuthTicket = SteamUser.GetAuthSessionTicket(m_Ticket, 1024, out m_pcbTicket);
                print("SteamUser.GetAuthSessionTicket(Ticket, 1024, out pcbTicket) - " + m_HAuthTicket + " -- " + m_pcbTicket);
            }

            if (GUILayout.Button("BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID())"))
            {
                if (m_HAuthTicket != HAuthTicket.Invalid && m_pcbTicket != 0)
                {
                    EBeginAuthSessionResult ret = SteamUser.BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID());
                    print("SteamUser.BeginAuthSession(m_Ticket, " + (int)m_pcbTicket + ", " + SteamUser.GetSteamID() + ") - " + ret);
                }
                else
                {
                    print("Call GetAuthSessionTicket first!");
                }
            }
        }

        if (GUILayout.Button("EndAuthSession(SteamUser.GetSteamID())"))
        {
            SteamUser.EndAuthSession(SteamUser.GetSteamID());
            print("SteamUser.EndAuthSession(" + SteamUser.GetSteamID() + ")");
        }

        if (GUILayout.Button("CancelAuthTicket(m_HAuthTicket)"))
        {
            SteamUser.CancelAuthTicket(m_HAuthTicket);
            print("SteamUser.CancelAuthTicket(" + m_HAuthTicket + ")");
        }

        GUILayout.Label("UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID()) : " + SteamUser.UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID()));
        GUILayout.Label("BIsBehindNAT() : " + SteamUser.BIsBehindNAT());

        if (GUILayout.Button("AdvertiseGame(2, 127.0.0.1, 27015)"))
        {
            SteamUser.AdvertiseGame(CSteamID.NonSteamGS, 2130706433, 27015);
            print("SteamUser.AdvertiseGame(2, 2130706433, 27015)");
        }

        if (GUILayout.Button("RequestEncryptedAppTicket()"))
        {
            byte[]         k_unSecretData = System.BitConverter.GetBytes(0x5444);
            SteamAPICall_t handle         = SteamUser.RequestEncryptedAppTicket(k_unSecretData, sizeof(uint));
            OnEncryptedAppTicketResponseCallResult.Set(handle);
            print("SteamUser.RequestEncryptedAppTicket(k_unSecretData, " + sizeof(uint) + ") - " + handle);
        }

        if (GUILayout.Button("GetEncryptedAppTicket()"))
        {
            byte[] rgubTicket = new byte[1024];
            uint   cubTicket;
            bool   ret = SteamUser.GetEncryptedAppTicket(rgubTicket, 1024, out cubTicket);
            print("SteamUser.GetEncryptedAppTicket() - " + ret + " -- " + cubTicket);
        }

        //GUILayout.Label("GetGameBadgeLevel(1, false) : " + SteamUser.GetGameBadgeLevel(1, false)); // SpaceWar does not have trading cards, so this function will only ever return 0 and produce an annoying warning.
        GUILayout.Label("GetPlayerSteamLevel() : " + SteamUser.GetPlayerSteamLevel());

        if (GUILayout.Button("RequestStoreAuthURL(\"https://steampowered.com\")"))
        {
            SteamAPICall_t handle = SteamUser.RequestStoreAuthURL("https://steampowered.com");
            OnStoreAuthURLResponseCallResult.Set(handle);
            print("SteamUser.RequestStoreAuthURL(\"https://steampowered.com\") - " + handle);
        }

#if _PS3
        //GUILayout.Label("LogOn() : " + SteamUser.LogOn());
        //GUILayout.Label("LogOnAndLinkSteamAccountToPSN : " + SteamUser.LogOnAndLinkSteamAccountToPSN());
        //GUILayout.Label("LogOnAndCreateNewSteamAccountIfNeeded : " + SteamUser.LogOnAndCreateNewSteamAccountIfNeeded());
        //GUILayout.Label("GetConsoleSteamID : " + SteamUser.GetConsoleSteamID());
#endif
    }
Esempio n. 11
0
 public void tellVoice(CSteamID steamID, byte[] data, int length)
 {
     if (this.bufferReceive == null || this.received == null)
     {
         return;
     }
     if (base.channel.checkOwner(steamID) && !Provider.isServer)
     {
         if (!OptionsSettings.chatVoiceIn || base.channel.owner.isMuted)
         {
             return;
         }
         if (base.player.life.isDead)
         {
             return;
         }
         if (length <= 5)
         {
             return;
         }
         this.usingWalkieTalkie = (data[4] == 1);
         if (this.usingWalkieTalkie)
         {
             if (!this.canHearRadio)
             {
                 return;
             }
             if (Player.player != null && Player.player.quests.radioFrequency != base.player.quests.radioFrequency)
             {
                 return;
             }
         }
         for (int i = 0; i < length; i++)
         {
             data[i] = data[i + 5];
         }
         uint num;
         if (SteamUser.DecompressVoice(data, (uint)length, this.bufferReceive, (uint)this.bufferReceive.Length, ref num, PlayerVoice.FREQUENCY) == null)
         {
             float num2 = num / 2u / PlayerVoice.FREQUENCY;
             this.playback += num2;
             int num3 = 0;
             while ((long)num3 < (long)((ulong)num))
             {
                 this.received[this.write]  = (float)BitConverter.ToInt16(this.bufferReceive, num3) / 32767f;
                 this.received[this.write] *= OptionsSettings.voice;
                 this.write++;
                 if ((long)this.write >= (long)((ulong)PlayerVoice.SAMPLES))
                 {
                     this.write = 0;
                 }
                 num3 += 2;
             }
             this.audioSource.clip.SetData(this.received, 0);
             if (!this.isPlaying)
             {
                 this.needsPlay = true;
                 if (this.delayPlay <= 0f)
                 {
                     this.delayPlay = 0.3f;
                 }
             }
         }
     }
 }