1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-13 19:40:20 +03:00
opentx/sound/recorder/Program.cs
Kjell Kernen eceedefa94 Switched recorder library to one custom made by Tomas Andersson.
Lots of small changes to both Speaker and Recorder.
2014-03-20 22:32:37 +01:00

101 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using WaveLib;
namespace AudioRecorder
{
class Program
{
WavFileWriter filewriter;
byte[] tmparray;
void Go()
{
int samplerate = 16000;
int bits = 16; // 8 or 16
int channels = 1; // 1 or 2
filewriter = new WavFileWriter("out.wav", samplerate, bits, channels);
WaveFormat fmt = new WaveFormat(samplerate, bits, channels);
// devicenumber, wavformat, buffersize, callback
int buffersize = 16384;
WaveInRecorder rec = new WaveInRecorder(-1, fmt, buffersize, this.DataArrived);
tmparray = new byte[buffersize];
Console.WriteLine("Recording - press Enter to end");
Console.ReadLine();
rec.Close();
filewriter.Close();
Console.WriteLine("Bye");
}
private void DataArrived(IntPtr data, int size)
{
Console.WriteLine("DataArrived {0} bytes", size);
Marshal.Copy(data, tmparray, 0, size);
filewriter.Write(tmparray);
}
static void Main(string[] args)
{
new Program().Go();
}
}
class WavFileWriter
{
BinaryWriter filewriter;
long audiobyteswritten;
public WavFileWriter(string filename, int samplerate, int bits, int channels)
{
filewriter = new BinaryWriter(File.Open(filename, FileMode.Create));
filewriter.Write((uint)0x46464952); // "RIFF"
filewriter.Write((uint)0); // chunkisize (filled in when we close)
filewriter.Write((uint)0x45564157); // "WAVE"
// subchunk1
filewriter.Write((uint)0x20746d66); // "fmt "
filewriter.Write((uint)16);
filewriter.Write((UInt16)1);
filewriter.Write((UInt16)channels);
filewriter.Write((uint)samplerate);
filewriter.Write((uint)(channels*samplerate*bits/8));
filewriter.Write((UInt16)(channels*bits/8));
filewriter.Write((UInt16)bits);
// subchunk2
filewriter.Write((uint)0x61746164); // "data"
filewriter.Write((uint)0); // chunkisize (filled in when we close)
}
public void Write(byte[] data)
{
filewriter.Write(data);
audiobyteswritten += data.Length;
}
public void Close()
{
filewriter.Seek(4, SeekOrigin.Begin);
filewriter.Write((uint)(audiobyteswritten + 36)); // 36 = total size of chunk headers
filewriter.Seek(40, SeekOrigin.Begin);
filewriter.Write((uint)audiobyteswritten);
filewriter.Close();
}
}
}