Ejemplo n.º 1
0
		private void InitializeHeader()
		{
			try
			{
				lock (_randomAccessLock)
				{
					_randomAccessWriter = new RandomAccessFile(_filePath, "rw");

					_randomAccessWriter.SetLength(0);
					// Set file length to 0, to prevent unexpected behavior in case the file already existed
					_randomAccessWriter.WriteBytes("RIFF");
					_randomAccessWriter.WriteInt(0); // Final file size not known yet, write 0 
					_randomAccessWriter.WriteBytes("WAVE");
					_randomAccessWriter.WriteBytes("fmt ");
					_randomAccessWriter.WriteInt(Integer.ReverseBytes(16)); // Sub-chunk size, 16 for PCM
					_randomAccessWriter.WriteShort(Short.ReverseBytes(1)); // AudioFormat, 1 for PCM
					_randomAccessWriter.WriteShort(Short.ReverseBytes(Channels)); // Number of channels, 1 for mono, 2 for stereo
					_randomAccessWriter.WriteInt(Integer.ReverseBytes(_sampleRate)); // Sample rate
					_randomAccessWriter.WriteInt(Integer.ReverseBytes(_sampleRate * FmtAvgBps * Channels / 8));
					// Byte rate, SampleRate*NumberOfChannels*BitsPerSample/8
					_randomAccessWriter.WriteShort(Short.ReverseBytes(Channels * FmtAvgBps / 8));
					// Block align, NumberOfChannels*BitsPerSample/8
					_randomAccessWriter.WriteShort(Short.ReverseBytes(FmtAvgBps)); // Bits per sample
					_randomAccessWriter.WriteBytes("data");
					_randomAccessWriter.WriteInt(0); // Data chunk size not known yet, write 0
				}

			}
			catch (NullReferenceException e)
			{
				Log.Debug(Tag, e.Message + e.StackTrace);
				State = WavRecorderState.Error;
			}
		}