private void ProcessWaveform(Audio2Midi audio2midi, float[] waveform) { // Start the stopwatch Stopwatch sw = Stopwatch.StartNew(); // stereo waveform float[] monoSignal = BassProxy.GetMonoSignal(waveform, audioChannels, BassProxy.MonoSummingType.Mix); //float[] monoSignal = ReadTestSignal(); // divide it into chunks of bufferSize var chunks = monoSignal.Split(bufferSize); int chunkLength = chunks.Count(); Console.WriteLine("Chunk count: {0}", chunkLength); int count = 1; foreach (var chunk in chunks) { Console.Write("Processing chunk: {0} \r", count); var chunkArray = chunk.ToArray(); if (chunkArray.Length < bufferSize) { // zero pad the last chunk Array.Resize <float>(ref chunkArray, bufferSize); } audio2midi.Process(chunkArray); count++; } sw.Stop(); Console.Out.WriteLine("Audio2Midi Processed All: Time used: {0} ms", sw.Elapsed.TotalMilliseconds); }
//[Test] public void TestPianoRoll() { var audio2Midi = new Audio2Midi(); var bitmap = new Bitmap(600, 785, PixelFormat.Format32bppArgb); audio2Midi.RenderPianoRoll(bitmap, 42, 784); bitmap.Save("piano_roll.png"); }
void Audio2MidiInitialise(string inputFilepath) { // init audio system var audioSystem = BassProxy.Instance; //float[] wavData = BassProxy.ReadMonoFromFile(inputFilepath, (int) sampleRate, 1000, 0); float[] wavData = BassProxy.ReadMonoFromFile(inputFilepath, (int)sampleRate); // calculate number of frames and the duration frames = MathUtils.RoundAwayFromZero((double)wavData.Length / (double)bufferSize); audioLength = (double)wavData.Length / (double)sampleRate * 1000; audio2midi = new Audio2Midi(); audio2midi.IsTrackLoaded = true; audio2midi.Initialize(sampleRate, audioChannels, audioLength, frames); ProcessWaveform(audio2midi, wavData); }