Example #1
0
 /// <summary>
 /// Заменяет заданный канал в аудио другим каналом
 /// </summary>
 /// <param name="audio">Аудио</param>
 /// <param name="num">Номер заменяемого канала</param>
 /// <param name="channel">Массив данных канала</param>
 /// <returns></returns>
 public static UInt32[,] ReplaceChannel(UInt32[,] audio, Int32 num, UInt32[] channel)
 {
     UInt32[,] naudio = new UInt32[audio.GetLength(0), audio.GetLength(1)];
     for (int ch = 0; ch < naudio.GetLength(1); ch++)
     {
         for (uint i = 0; i < channel.Length; i++)
         {
             if (i != num)
             {
                 naudio[i, ch] = audio[i, ch];
                 ch++;
             }
             else
             {
                 naudio[i, ch] = channel[i];
             }
         }
     }
     return(naudio);
 }
Example #2
0
        /// <summary>
        /// Распарсит массив байт .wav файла и вернёт объект типа DotWaveInfo
        /// </summary>
        /// <param name="bytes">Одномерный массив байт аудио</param>
        /// <returns></returns>
        public static DotWaveInfo GetWaves(byte[] bytes)
        {
            UInt16 numChannels   = BitConverter.ToUInt16(bytes, 22);
            UInt32 sampleRate    = BitConverter.ToUInt32(bytes, 24);
            UInt16 bitsPerSample = BitConverter.ToUInt16(bytes, 34);

            UInt32[,] WData = new UInt32[(bytes.Length - 44) / (numChannels * (bitsPerSample / 8)), numChannels];

            for (uint block = 0; block < WData.GetLength(0); block++)
            {
                for (uint ch = 0; ch < numChannels; ch++)
                {
                    byte[] part = new byte[4];
                    for (uint i = 0; i < bitsPerSample / 8; i++)
                    {
                        part[i] = bytes[44 + block * (numChannels * (bitsPerSample / 8)) + ch * (bitsPerSample / 8) + i];
                    }
                    if (bitsPerSample <= 8)
                    {
                        if (part[0] < 127)
                        {
                            part[0] += 127;
                        }
                        else
                        {
                            part[0] -= 127;
                        }
                    }
                    UInt32 upart = BitConverter.ToUInt32(part, 0);
                    upart            = (UInt32)((double)upart / Math.Pow(256, bitsPerSample / 8) * (double)UInt32.MaxValue);
                    WData[block, ch] = upart;
                }
            }

            return(new DotWaveInfo(WData, sampleRate, bitsPerSample));
        }