start
との 2 つのメソッドstop
が記述されたコンソール アプリケーションを開発しています。メソッドが呼び出されると、start
システムからのオーディオ データのキャプチャが開始され、動作状態のままになり、コンソールが一時停止します。stop
メソッドを呼び出してメソッドを停止したいのですstart
が、コンソールはまだstart
メソッドでスタックしています。別のコンソールから停止メソッドを呼び出そうとしましたが、失敗しました: 「未処理の例外: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。」
どうすればこれを達成できますか?
最初に呼び出したいのですがwavtomp3
、その作業中にstoprecording()
コンソールアプリから呼び出したいと思います。これが私のコードです:
static LameMP3FileWriter wri;
static IWaveIn waveIn;
public void wavtomp3(string fName,string storageLocation)
{
string[] aFileName=fName.Split('.');
aFileName[0] = aFileName[0] + ".mp3";
string aSaveLocation = storageLocation + "\\"+aFileName[0];
// MessageBox.Show("Sample Rate=" + waveIn.WaveFormat.SampleRate.ToString());
// string fname = DateTime.Now.Ticks.ToString();
// Start recording from loopback
waveIn = new WasapiLoopbackCapture();
wri = new LameMP3FileWriter(aSaveLocation, waveIn.WaveFormat, 44);
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += waveIn_RecordingStopped;
waveIn.StartRecording();
}
static void waveIn_RecordingStopped(object sender, StoppedEventArgs e)
{
if (waveIn != null) // working around problem with double raising of RecordingStopped
{
waveIn.Dispose();
waveIn = null;
}
if (wri != null)
{
wri.Close();
wri = null;
}
}
static void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
if (wri != null)
if (e.BytesRecorded == 0)
{
wri.Write(e.Buffer, 0, 12800);
Debug.WriteLine("Adding Silence To File No Sound is playing");
}
else if (e.BytesRecorded > 0)
{
wri.Write(e.Buffer, 0, e.BytesRecorded);
Debug.WriteLine("Sound Playing From Sound Card and recording");
}
Debug.WriteLine("bytes record=" + e.BytesRecorded);
}
public void stoprecording()
{
waveIn.StopRecording();
Debug.WriteLine("StopRecording");
}