c# - How to save an audio capture in a wav file using ASIO and Naudio? -


so far, wrote :

private asioout asiodriver; private bufferedwaveprovider buffer;  string[] drivernames = asioout.getdrivernames(); asiodriver = new asioout(drivernames[1]); buffer = new bufferedwaveprovider(new waveformat(samplerate, 16, 2)); asiodriver.audioavailable += new eventhandler<asioaudioavailableeventargs>(asiodriver_audioavailable); asiodriver.initrecordandplayback(buffer, 2, samplerate); asiodriver.play();  private void asiodriver_audioavailable(object sender, asioaudioavailableeventargs e) {      byte[] buf = new byte[e.samplesperbuffer * 4];     (int = 0; < e.inputbuffers.length; i++)     {         marshal.copy(e.inputbuffers[i], buf, 0, e.samplesperbuffer * 4);         marshal.copy(buf, 0, e.outputbuffers[i], e.samplesperbuffer * 4);          if (recorderon && == 1)         {             recorder.addinputtostream(buf);         }     } } 

this part used capture , playback sound guitar asio. no problems far.

public void addinputtostream(byte[] buffer) {     byte[] sample = new byte[buffer.length / 4];     if (wavewriter == null) wavewriter = new wavefilewriter(@"c:\temp\test0001.wav", new waveformat(44100, 16, 1));     (int = 0; < buffer.length; = + 4)     {         sample[i/4] = (byte)convert.tosingle(buffer[i] + buffer[i + 1] + buffer[i + 2] + buffer[i + 3]);     }     wavewriter.write(sample, 0, sample.length); } 

the problem appears in method addinputtostream, sound put in .wav file have lot of "audio parasites" in file. irritating. tried change i variable when call method, not used convert.tosingle same result.

i suspect problem waveformat of wavewriter don't know i'm missing. of have clue ?

you need create wavefilewriter , write samples out. pretty simple, took me while also. (note: didn't setup waveprovider, have part already).

 class asiosample {     private naudio.wave.asioout _audiodevice;     public wavefilewriter asiowavefilewriter;     public asiosample()     {         //this set 1 channel         asiowavefilewriter = new wavefilewriter("sample.wav", new waveformat(48000, 1));         _audiodevice = new naudio.wave.asioout(2);//or whatever         _audiodevice.initrecordandplayback(_waveprovider, 1, 48000);         _audiodevice.audioavailable += new eventhandler<naudio.wave.asioaudioavailableeventargs>(onaudioavailable);         _audiodevice.play();     }      private unsafe void onaudioavailable(object sender, naudio.wave.asioaudioavailableeventargs e)     {         var floatsamples = new float[e.samplesperbuffer * e.inputbuffers.length];         e.getasinterleavedsamples(floatsamples);         asiowavefilewriter.writesamples(floatsamples, 0, floatsamples.length);         asiowavefilewriter.flush();     }  }  

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -