Exemplo n.º 1
0
 public PcmWrapper(PcmWrapper source)
 {
     EncodeHeader(source.GetHeader());
     Payload = new byte[source.Payload.Length];
     Buffer.BlockCopy(source.Payload, 0, Payload, 0, source.Payload.Length);
 }
Exemplo n.º 2
0
        public void Combine(PcmWrapper source)
        {
            lock (_lock)
            {
                byte[] payload = new byte[Payload.Length + source.Payload.Length];
                Buffer.BlockCopy(Payload, 0, payload, 0, Payload.Length);
                Buffer.BlockCopy(source.Payload, 0, payload, Payload.Length, source.Payload.Length);

                Payload = payload;
                SubChunk2Size = payload.Length;
                ChunkSize = 36 + payload.Length;
            }
        }
Exemplo n.º 3
0
        public static void SaveFile(PcmWrapper data, string saveName)
        {
            byte[] save = data.Encode();
            FileInfo info = new FileInfo(saveName);

            if (!info.Directory.Exists)
                info.Directory.Create();

            using (BinaryWriter writer = new BinaryWriter(new FileStream(saveName, FileMode.Create)))
            {
                writer.Write(save);
            }
        }
Exemplo n.º 4
0
        public static int? GetFirstSilence(PcmWrapper pcm, float startSecond, float endSecond,
            float minPauseLength, float maxPauseLength, int noiseLevel)
        {
            int lowFrequency = -noiseLevel;
            int highFrequency = noiseLevel;

            int startSearch = (int)(startSecond * pcm.ByteRate);
            if (startSearch < 0) startSearch = 0;
            startSearch += startSearch % 2;
            int endSearch = (int)(endSecond * pcm.ByteRate);
            int minSilenceThreshold = (int)(minPauseLength * pcm.ByteRate);
            int maxSilenceThreshold = (int)(maxPauseLength * pcm.ByteRate);
            byte[] payload = pcm.GetPayload();

            if (minPauseLength == 0)
            {
                int ret = startSearch;
                ret -= (ret % 2);
                return ret;
            }

            int silenceStart = 0;
            int silenceCount = 0;
            float maxSilence = 0f;
            List<short> shorts = new List<short>();

            for (int j = startSearch; j < endSearch && j < payload.Length - 1; j += 2)
            {
                short snd = ComplementToSigned(j, payload);

                if (silenceCount >= maxSilenceThreshold)
                {
                    int ret = silenceStart + (silenceCount / 2);
                    ret -= (ret % 2);
                    return ret;
                }
                else if (snd > lowFrequency && snd < highFrequency)
                {
                    if (silenceCount == 0)
                    {
                        silenceStart = j;
                    }

                    silenceCount += 2;
                }
                else if (silenceCount >= minSilenceThreshold)
                {
                    int ret = silenceStart + (silenceCount / 2);
                    ret -= (ret % 2);
                    return ret;
                }
                else
                {
                    maxSilence = Math.Max(silenceCount, maxSilence);
                    silenceCount = 0;
                }

                shorts.Add(snd);
            }
            return null;
        }
Exemplo n.º 5
0
 private void HandleInputAudio(int index, TywiAudioStream stream, DeviceProfile device)
 {
     byte[] content = stream.ReadAudio();
     if (content != null && content.Length > 0)
     {
         PcmWrapper wrapper = new PcmWrapper(content, 16000, 1, 16);
         _service.PostAudio(wrapper.Encode(), device);
     }
 }