Esempio n. 1
0
        /// <summary>
        /// Writes data to the buffer.
        /// </summary>
        /// <returns>True on success.</returns>
        public bool WriteData()
        {
            int read;

            lock (_waveOut.Stream)
            {
                read = _waveOut.Stream.Read(_buffer, 0, _buffer.Length);
            }
            if (read > 0)
            {
                if (_disposed)
                {
                    return(false);
                }
                _waveOut.AudioMixer.ApplyEffects(_buffer, _waveOut.Format);
                Array.Clear(_buffer, read, _buffer.Length - read);

                MMResult result = MMInterops.waveOutWrite(_waveOut.WaveOutHandle, _header,
                                                          Marshal.SizeOf(_header));
                if (result != MMResult.MMSYSERR_NOERROR)
                {
                    WaveOutResult.Try(result);
                }
                return(result == MMResult.MMSYSERR_NOERROR);
            }
            return(false);
        }
Esempio n. 2
0
    public void OnResult(MMResult result)
    {
        if (result.Clip == null)
        {
            return;
        }
        bool needBlend = m_currentClip.IsNull() == false;

        if (needBlend)
        {
            if (result.Clip == m_currentClip.GetAnimationClip())
            {
                return;
            }

            AnimationClipPlayable blendOutClip = m_currentClip;
            m_mixer.DisconnectInput(0);
            m_mixer.DisconnectInput(1);
            m_mixer.ConnectInput(1, blendOutClip, 0, 1.0f);
            m_weight = 0.0f;
            m_mixer.SetInputWeight(0, 0.0f);
            m_mixer.SetInputWeight(1, 1.0f);
        }
        else
        {
            m_mixer.SetInputWeight(0, 1.0f);
            m_mixer.SetInputWeight(1, 0.0f);
        }

        m_currentClip = AnimationClipPlayable.Create(m_graph, result.Clip);
        m_currentClip.SetTime(result.Time);

        m_mixer.DisconnectInput(0);
        m_mixer.ConnectInput(0, m_currentClip, 0, needBlend? 0.0f : 1.0f);
    }
Esempio n. 3
0
 internal virtual ABaseMode ReactionKeyBase(Keys Key)
 {
     JumpCounter = 0;
     ResultObject = this;
     FResult      = MMResult.None;
     OnReactionKey(Key);
     return ResultObject;
 }
Esempio n. 4
0
        /// <summary>
        /// Trys a WaveOut operation.
        /// </summary>
        /// <param name="result">The Result.</param>
        public static void Try(MMResult result)
        {
            if (result != (int) MMResult.MMSYSERR_NOERROR)
            {
                if (result == MMResult.WAVERR_STILLPLAYING) return;

                throw new InvalidOperationException((result).ToString());
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Sets the Volume.
        /// </summary>
        /// <param name="waveOut">The WaveOut.</param>
        /// <param name="left">The Left.</param>
        /// <param name="right">The Right.</param>
        public static void SetVolume(IntPtr waveOut, float left, float right)
        {
            uint     tmp    = (uint)(left * 0xFFFF) + ((uint)(right * 0xFFFF) << 16);
            MMResult result = MMInterops.waveOutSetVolume(waveOut, tmp);

            if (result != MMResult.MMSYSERR_NOERROR)
            {
                WaveOutResult.Try(MMInterops.waveOutSetVolume(waveOut, tmp));
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Trys a WaveOut operation.
        /// </summary>
        /// <param name="result">The Result.</param>
        public static void Try(MMResult result)
        {
            if (result != (int)MMResult.MMSYSERR_NOERROR)
            {
                if (result == MMResult.WAVERR_STILLPLAYING)
                {
                    return;
                }

                throw new InvalidOperationException((result).ToString());
            }
        }
Esempio n. 7
0
 /// <summary>
 /// Stops the wavestream.
 /// </summary>
 public void Stop()
 {
     if (_playbackState != PlaybackState.Stopped)
     {
         _playbackState = PlaybackState.Stopped;
         lock (_lockObj)
         {
             MMResult result = MMInterops.waveOutReset(WaveOutHandle);
             WaveOutResult.Try(result);
         }
         RaisePlaybackChanged();
     }
 }
Esempio n. 8
0
        } // ReactionKey

        private bool Init(ABaseMode NewMode)
        {
            NewMode.Const = Const;
            NewMode       = NewMode.Init();
            MMResult Result = NewMode.Result;

            if (Result == MMResult.Positive)
            {
                MM = NewMode;
            }
            FCurrentMode = MM.CurrentMode;
            Const        = MM.Const;    //Временно, рефрешим константы
            FEmployer    = MM.Employer; //Временно
            return(Result == MMResult.Positive ? true : false);
        } // Init
Esempio n. 9
0
        public override void Write(byte[] buffer, int offset, int count)
        {
            do
            {
                int cb         = 0;
                int bufferSize = hdr1.cbSrcLength;
                if (ptrBuffer1 == hdr1.cbSrcLength || count == 0)
                {
                    if (count == 0)
                    {
                        hdr1.cbSrcLength = ptrBuffer1;
                    }

                    AcmStreamConvertFlags flags;
                    flags = AcmStreamConvertFlags.BLOCKALIGN;

                    if (firstBlock)
                    {
                        flags      = AcmStreamConvertFlags.START;
                        firstBlock = false;
                    }
                    else if (count != 0 || ptrBuffer1 > 0)
                    {
                        flags = AcmStreamConvertFlags.BLOCKALIGN;
                    }
                    else
                    {
                        flags = AcmStreamConvertFlags.END;
                    }

                    MMResult mmr = AcmNativeMethods.acmStreamConvert(hStreamComp, ref hdr1, flags);

                    ptrBuffer1       = 0;
                    hdr1.cbSrcLength = bufferSize;
                    base.Write(outBuffer1, 0, hdr1.cbDstLengthUsed);
                }

                cb = Math.Min(hdr1.cbSrcLength - ptrBuffer1, count);
                Array.Copy(buffer, offset, inBuffer1, ptrBuffer1, cb);
                count      -= cb;
                ptrBuffer1 += cb;
                offset     += cb;
            } while (count > 0);
        }
 private void callbackWaveIn(IntPtr deviceHandle, uint message, IntPtr instance, ref WaveHeader waveHeader, IntPtr reserved2)
 {
     if (message == MM_WIM_DATA)
     {
         if (waveHeader.bytesRecorded > 0)
         {
             int numberOfBytesRecorded = waveHeader.bytesRecorded;
             if (numberOfBytesRecorded > 0)
             {
                 Monitor.Enter(lockObject);  // This does not seem to help.. still get access violations when accessing the data.
                 byte[] newSoundData = new byte[numberOfBytesRecorded];
                 Marshal.Copy(waveHeader.dataPointer, newSoundData, 0, numberOfBytesRecorded);
                 totalNumberOfBytesRecorded += numberOfBytesRecorded;
                 timeRecordingList.Add(new Tuple <int, DateTime, byte[]>(recordingIndex, DateTime.Now, newSoundData));
                 if (timeRecordingList.Count > storageCount)
                 {
                     timeRecordingList.RemoveAt(0);
                 }
                 recordingIndex++;
                 Monitor.Exit(lockObject);
                 GC.Collect();  // This IS ugly, but it appears to work ...
             }
         }
         MMResult i = waveInUnprepareHeader(waveHandle, ref waveHeader, Convert.ToUInt32(Marshal.SizeOf(waveHeader)));
         if (i != MMResult.MMSYSERR_NOERROR)
         {
         }
         SetupBuffer();
     }
     else if (message == MM_WIM_CLOSE)
     {
     }
     else
     {
     }
 }
Esempio n. 11
0
        protected override void LoadHeader()
        {
            base.LoadHeader();

            byte[] fmtIn = _fmt.GetBytes();
            if (_fmt2 == null)
            {
                _fmt2 = WaveFormat2.GetPCMWaveFormat(_fmt.SamplesPerSec, _fmt.Channels, _fmt.BitsPerSample != 0 ? _fmt.BitsPerSample : (short)16);
            }
            byte[]   fmtOut = _fmt2.GetBytes();
            MMResult mmr;

            _fmt2         = new WaveFormat2(fmtOut);
            mmr           = AcmNativeMethods.acmStreamOpen(out hStreamComp, IntPtr.Zero, fmtIn, fmtOut, IntPtr.Zero, 0, 0, AcmStreamOpenFlags.CALLBACK_NULL);
            hdr1          = new ACMSTREAMHEADER();
            hdr1.cbStruct = Marshal.SizeOf(hdr1);
            hdr2          = new ACMSTREAMHEADER();
            hdr2.cbStruct = Marshal.SizeOf(hdr2);

            int cbIn = (_fmt.AvgBytesPerSec * DefaultBufferSizeInSeconds / _fmt.BlockAlign + 1) * _fmt.BlockAlign;

            inBuffer1 = new byte[cbIn];
            inBuffer2 = new byte[cbIn];
            int cbOut = _fmt2.BlockAlign * _fmt2.AvgBytesPerSec * DefaultBufferSizeInSeconds;

            mmr         = AcmNativeMethods.acmStreamSize(hStreamComp, cbIn, out cbOut, AcmStreamSizeFlags.SOURCE);
            outBuffer1  = new byte[cbOut];
            outBuffer2  = new byte[cbOut];
            hinBuffer1  = GCHandle.Alloc(inBuffer1, GCHandleType.Pinned);
            houtBuffer1 = GCHandle.Alloc(outBuffer1, GCHandleType.Pinned);
            hinBuffer2  = GCHandle.Alloc(inBuffer2, GCHandleType.Pinned);
            houtBuffer2 = GCHandle.Alloc(outBuffer2, GCHandleType.Pinned);

            hdr1.pbSrc       = hinBuffer1.AddrOfPinnedObject();
            hdr1.pbDst       = houtBuffer1.AddrOfPinnedObject();
            hdr1.cbSrcLength = cbIn;
            hdr1.cbDstLength = cbOut;

            hdr2.pbSrc       = hinBuffer2.AddrOfPinnedObject();
            hdr2.pbDst       = houtBuffer2.AddrOfPinnedObject();
            hdr2.cbSrcLength = cbIn;
            hdr2.cbDstLength = cbOut;

            ptrBuffer1 = ptrBuffer1 = 0;

            bufferRead = new SlidingBuffer(cbOut);
            firstBlock = true;

            bufferRead.BufferStarving = (BufferStarvingHandler) delegate(SlidingBuffer obj, int spaceAvailable)
            {
                if (hdr1.cbDstLengthUsed == ptrBuffer1)
                {
                    int cb = ReadInternal(inBuffer1, 0, inBuffer1.Length);
                    if (cb == 0)
                    {
                        return(0);
                    }
                    ptrBuffer1 = 0;
                    AcmStreamConvertFlags flags;
                    if (firstBlock)
                    {
                        flags      = AcmStreamConvertFlags.START;
                        firstBlock = false;
                    }
                    else if (cb == inBuffer1.Length)
                    {
                        flags = AcmStreamConvertFlags.BLOCKALIGN;
                    }
                    else
                    {
                        flags = AcmStreamConvertFlags.END;
                    }

                    hdr1.cbSrcLength = cb;
                    MMResult res = AcmNativeMethods.acmStreamConvert(hStreamComp, ref hdr1, flags);
                    return(cb);
                }

                int written = obj.Append(outBuffer1, ptrBuffer1, hdr1.cbDstLengthUsed - ptrBuffer1);
                ptrBuffer1 += written;
                return(written);
            };

            mmr = AcmNativeMethods.acmStreamPrepareHeader(hStreamComp, ref hdr1, 0);
            mmr = AcmNativeMethods.acmStreamPrepareHeader(hStreamComp, ref hdr2, 0);
        }
Esempio n. 12
0
 protected ABaseMode Positive()
 {
     ResultObject = this;
     FResult = MMResult.Positive;
     return ResultObject;
 }
Esempio n. 13
0
 protected ABaseMode Negative()
 {
     ResultObject = this;
     FResult = MMResult.Negative;
     return ResultObject;
 }
Esempio n. 14
0
 /// <summary>
 /// Сделана для предотвращения ошибок, типа если забудешь присвоить ResultObject результатом Init()
 /// </summary>
 /// <param name="ToMode"></param>
 /// <returns></returns>
 protected ABaseMode JumpTo(ABaseMode ToMode)
 {
     ResultObject = ToMode.Init();
     FResult = ResultObject.Result;
     return ResultObject;
 }
Esempio n. 15
0
        internal virtual ABaseMode ReactionBarcodeBase(string Barcode)
        {
            JumpCounter  = 0;
            FResult      = MMResult.None;
            ResultObject = this;
            ThereHandler = false;
            Dictionary<string, string> dicBarcode = Helper.DisassembleBarcode(Barcode);
            bool IsRef = false;
            bool IsObject = false;  //Это реально существующий объект

            //Это может быть справочник!
            ARef Ref = null;
            if (Barcode.Substring(0, 2) == "25" && dicBarcode["Type"] == "113")
            {
                Ref = new RefEmployer(SS);
                if (Ref.FoundIDD(dicBarcode["IDD"]))
                {
                    IsRef = true;
                    OnReactionSCEmployers(Ref as RefEmployer);
                }
                if (!IsRef)
                {
                    Ref = new RefSection(SS);
                    if (Ref.FoundIDD(dicBarcode["IDD"]))
                    {
                        IsRef = true;
                        OnReactionSCSection(Ref as RefSection);
                    }
                }
                if (!IsRef)
                {
                    Ref = new RefPrinter(SS);
                    if (Ref.FoundIDD(dicBarcode["IDD"]))
                    {
                        IsRef = true;
                        OnReactionSCPrinter(Ref as RefPrinter);
                    }
                }
            }
            else if (dicBarcode["Type"] == "6")
            {
                Ref = new RefBox(SS);
                if (Ref.FoundID(dicBarcode["ID"]))
                {
                    IsRef = true;
                    OnReactionSCBox(Ref as RefBox);
                }
            }
            else if (Barcode.Substring(0, 2) == "26" && dicBarcode["Type"] == "113")
            {
                Doc Doc = new Doc(SS);
                if (Doc.FoundIDD(dicBarcode["IDD"]))
                {
                    IsObject = true;
                    OnReactionDoc(Doc);
                }
            }
            else if (dicBarcode["Type"] == "pallete")
            {
                //ВОТ ЭТА ХУЕТА НИ КАК НЕ УЧИТЫВАЕТСЯ (КАК ОБЪЕКТ, ВСМЫСЛЕ)
                //  ТАК ЧТО ПОТЕНЦИАЛЬНО МОГУТ БЫТЬ ПРОБЛЕМЫ НА ВСЯКИЙ СЛУЧАЙ ВЗВОДИМ ФЛАГ
                IsObject = true;
                //OnReactionPallete(Convert.ToInt32(dicBarcode["pallete"]));
                OnReactionPallete(Barcode);
            }

            IsObject = IsRef ? true : IsObject; //Если это справочник, то полюбому объект
            if (!IsObject)
            {
                //Товаром он может быть при любом раскладе, так что если не определился как объект, то будем искать товар
                Ref = new RefItem(SS);
                if ((Ref as RefItem).FoundBarcode(Barcode))
                {
                    {
                        IsRef = true;
                        OnReactionSCItem(new ReactionSCEventArgs(Barcode, Ref));
                    }
                }
            }
            if (IsRef)
            {
                //Вверху обрабатывали только справочники и в какой-то из них попали
                OnReactionSC(new ReactionSCEventArgs(Barcode, Ref));
            }
            OnReactionBarcode(Barcode); // просто реакция на штрихкод

            if (!ThereHandler)
            {
                //никакой обработчик не сработал! Отобъем исходя из настроек по умолчанию
                FExcStr = "Нет действий с этим ШК в данном режиме!";
                FResult = MMResult.Negative;
            }
            return ResultObject;
        }