保存文件并将其命名为“相同”时间(NAudio),从而提高准确性

时间:2014-01-13 18:13:49

标签: c#

我想创建一个wavefile,并向其写入数据,我希望文件名是它开始的时间。

我知道使用Wavewriter写入波形文件很热,我知道如何将其命名为当前时间,但问题是,使文件尽可能接近文件的名称。

目前我有这样的事情:

    private void SaveReceivedAudio(string recieve)
    {
        try
        {
            using (var folderBrowser = new FolderBrowserDialog())
            {
                DialogResult result = folderBrowser.ShowDialog();
                if (result == DialogResult.OK)
                {
                    path = Path.GetFullPath(folderBrowser.SelectedPath) + (Path.DirectorySeparatorChar);
                    waveWriter = new NAudio.Wave.WaveFileWriter(path + recieve + "- " + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + ".wav", new WaveFormat(48000, 16, 2));
                    waveWriterYour = new WaveFileWriter(path + Environment.UserName + " - " + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + ".wav", new WaveFormat(48000, 16, 2));
                    Record = true;
                    Recording.ForeColor = System.Drawing.Color.Green;
                    Recording.Text = "Recording";
                }
                else
                {
                    Record = false;
                    Recording.ForeColor = System.Drawing.Color.Red;
                    Recording.Text = "Not Recording";
                }
            }
        }
        catch (Exception e)
        {
            MessageBox.Show("SaveReceivedAudio: " + e.Message);
        }
    }

因为你可以看到我点击一个按钮,选择一个目录,然后它会在创建时创建2个文件,然后将Record更改为True。

然而,这根本不准确,它可能相当接近,但这一切都取决于它是如何执行的。

现在,当我保存另一个线程时,当前音频数据处于循环状态,如下所示:

 private void RecordingQueueThread()
        {
            byte[] AudioData;
            byte[] AudioData2;
            while (connect)
            {
                try
                {
                    if (Queue.TryTake(out AudioData, 300))
                    {
                        if (AudioData.Length == 0)
                            break;
                        else
                        {
                            if (Record)
                            {
                                waveWriter.Write(AudioData, 0, AudioData.Length);
                                waveWriter.Flush();
                                TestTimer += AudioData.Length;
                            }
                        }
                    }
                    if (RecQueue.TryTake(out AudioData2, 300))
                    {
                        if (AudioData.Length == 0)
                            break;
                        else
                        {
                            if (Record)
                            {
                                waveWriterYour.Write(AudioData, 0, AudioData.Length);
                                waveWriterYour.Flush();
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                        MessageBox.Show("Recording: " + e.Message);
                }
            }
        }

或者,好吧,也许不是在一个循环中,但有2个线程为此提供。

但正如你所看到的,因为有2个线程(或更多)独立工作,音频将不会出现在我之前写的日期时,它会稍晚一些,它可能会有所不同,具体取决于好吧,很多事情,处理时间等。

这使这成为一个问题。

最好的事情是,如果我可以在第一次写入数据时准确写出时间,我不知道该怎么做。

有什么想法吗?

0 个答案:

没有答案