Arrêtez l'enregistreur audio lui-même après un délai de temps en c # (en utilisant NAudio)

StackOverflow https://stackoverflow.com/questions/4203736

  •  25-09-2019
  •  | 
  •  

Question

Je fais un audio enregistré en utilisant NAudio en C # et je dois enlever le bouton d'arrêt utilisé et simplement arrêter l'enregistrement lui-même après un certain délai.

Le code pour l'événement d'enregistrement est

     private void cmbRecord_Click(object sender, EventArgs e)
     {
            outputFilename = "file address";

            waveInStream = new WaveIn(44100,2);
            writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
            waveInStream.StartRecording();


            // Just controling the objects on the screen.
            cmbRecord.Enabled = false;
            cmbStop.Enabled = true;

    } 


     void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
    {
        writer.WriteData(e.Buffer, 0, e.BytesRecorded);
        int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);

    }

Le bouton d'arrêt est donnée à titre

      private void cmbStop_Click(object sender, EventArgs e)
    {
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;

        cmbRecord.Enabled = true;
        cmbStop.Enabled = false;
    }

Je dois arrêter l'enregistrement automatiquement dans l'événement cmbRecord_Click. Merci à l'avance.

Était-ce utile?

La solution

utiliser un minuterie , définissez la Interval et copiez le code dans l'événement de cmbStop_Click sur à l'événement OnTick de minuterie. Activer la minuterie en cas de mbRecord_Click et & oubliez pas de désactiver la minuterie en cas de cmbStop_Click

Modifier

Créer une nouvelle minuterie et définissez sa valeur

// mettez cette ligne dans votre formulaire niveau de la classe

  System.Windows.Forms.Timer mytimer=new System.Windows.Forms.Timer(); //create a new Timer

// mettez ces deux dans votre constructeur de forme juste après InitializeComponent();

mytimer.Interval=1000; //set the interval to 1 second.
mytimer.Tick += new EventHandler(mytimer_Tick);

Activer la minuterie en cas mbRecord_Click

private void cmbRecord_Click(object sender, EventArgs e)
{
            outputFilename = "file address";

            waveInStream = new WaveIn(44100,2);
            writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
            waveInStream.StartRecording();


            // Just controling the objects on the screen.
            cmbRecord.Enabled = false;
            cmbStop.Enabled = true;

            //Enable the timer to fire
            mytimer.Enabled = true;

}

Arrêter l'enregistrement après 1 seconde ..

void mytimer_Tick(object sender, EventArgs e)
{       
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;

        cmbRecord.Enabled = true;
        cmbStop.Enabled = false;
//disable the timer here so it won't fire again...
        mytimer.Enabled = false;
}

Autres conseils

Une chose que vous voudrez peut-être garder à l'esprit - il y aura un rappel DataAvailable après l'appel à StopRecording (ou pendant, selon le modèle de rappel utilisé), de sorte que vous pouvez retarder la fermeture le WaveFileWriter jusqu'à ce que vous avez tout ce qu'il écrit.

Jetez un oeil à l'exemple de projet VoiceRecorder qui utilise NAudio et cesse d'enregistrer au bout de 60 secondes. Je l'explique dans cet article comment enregistrement est automatiquement arrêté.

long maxFileLength = this.recordingFormat.AverageBytesPerSecond * 60;

int toWrite = (int)Math.Min(maxFileLength - writer.Length, bytesRecorded);
if (toWrite > 0)
    writer.WriteData(buffer, 0, bytesRecorded);
else
    Stop();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top