示例#1
0
 public void Submit(SampleCollection samples)
 {
     if (!samples.IsLast)
     {
         if (_bytesPerSample == 1)
         {
             // 1-8 bit samples are unsigned:
             for (var sample = 0; sample < samples.SampleCount; sample++)
             {
                 for (var channel = 0; channel < _channels; channel++)
                 {
                     _writer.Write((byte)Math.Round(samples[channel][sample] * _multiplier + 128));
                 }
             }
         }
         else
         {
             for (var sample = 0; sample < samples.SampleCount; sample++)
             {
                 for (var channel = 0; channel < _channels; channel++)
                 {
                     // Optimization - BitConverter wastes memory because you can't reuse the array:
                     var int32Value = (int)Math.Round(samples[channel][sample] * _multiplier);
                     ConvertInt32ToBytes(int32Value, _buffer);
                     _writer.Write(_buffer, 0, _bytesPerSample);
                 }
             }
         }
     }
     else
     {
         // Finish the data and RIFF chunks:
         _writer.FinishChunk();
         _writer.FinishChunk();
     }
 }
示例#2
0
        static void WriteFmtChunk(RiffWriter writer, AudioInfo audioInfo, int bytesPerSample)
        {
            Contract.Requires(writer != null);
            Contract.Requires(audioInfo != null);
            Contract.Requires(bytesPerSample > 0);

            writer.BeginChunk("fmt ", 16);
            writer.Write((ushort)1);
            writer.Write((ushort)audioInfo.Channels);
            writer.Write((uint)audioInfo.SampleRate);
            writer.Write((uint)(bytesPerSample * audioInfo.Channels * audioInfo.SampleRate));
            writer.Write((ushort)(bytesPerSample * audioInfo.Channels));
            writer.Write((ushort)audioInfo.BitsPerSample);
            writer.FinishChunk();
        }