Yo estaba tratando de desarrollar una grabadora de Voz en C#. He tratado de muchas maneras, como NAudio, DirectX, Microsoft.Xna.Marco.De Audio, etc.

Todo lo que le da el mismo resultado. Después de detener la grabación, el archivo de salida en formato mp3/wav salvo.

Los archivos mp3/wav se crean al principio sí mismo (sin contenido y 0 bytes)

Estoy tratando de crear una aplicación con la que puedes grabar audio en directo/simultáneamente.

    private void StartRecording() {
        this.WaveSource = new WaveInEvent { WaveFormat = new WaveFormat(44100, 1) };

        this.WaveSource.DataAvailable += this.WaveSourceDataAvailable;
        this.WaveSource.RecordingStopped += this.WaveSourceRecordingStopped;

        this.WaveFile = new WaveFileWriter(@"C:\Sample.wav", this.WaveSource.WaveFormat);

        this.WaveSource.StartRecording();
    }

    private void StopRecording() {
        this.WaveSource.StopRecording();
    }

    void WaveSourceDataAvailable(object sender, WaveInEventArgs e) {
        if (this.WaveFile != null) {
            this.WaveFile.Write(e.Buffer, 0, e.BytesRecorded);
            this.WaveFile.Flush();
        }
    }

    void WaveSourceRecordingStopped(object sender, StoppedEventArgs e) {
        if (this.WaveSource != null) {
            this.WaveSource.Dispose();
            this.WaveSource = null;
        }

        if (this.WaveFile != null) {
            this.WaveFile.Dispose();
            this.WaveFile = null;
        }
    }

3 Comentarios

  1. 7

    Me han resuelto el problema con NAudio propia biblioteca.
    Pocos modificación al código existente.

    public class Recorder {
    WaveIn sourceStream;
    WaveFileWriter waveWriter;
    readonly String FilePath;
    readonly String FileName;
    readonly int InputDeviceIndex;
    public Recorder(int inputDeviceIndex, String filePath, String fileName) {
    InitializeComponent();
    this.InputDeviceIndex = inputDeviceIndex;
    this.FileName = fileName;
    this.FilePath = filePath;
    }
    public void StartRecording(object sender, EventArgs e) {
    sourceStream = new WaveIn {
    DeviceNumber = this.InputDeviceIndex,
    WaveFormat =
    new WaveFormat(44100, WaveIn.GetCapabilities(this.InputDeviceIndex).Channels)
    };
    sourceStream.DataAvailable += this.SourceStreamDataAvailable;
    if (!Directory.Exists(FilePath)) {
    Directory.CreateDirectory(FilePath);
    }
    waveWriter = new WaveFileWriter(FilePath + FileName, sourceStream.WaveFormat);
    sourceStream.StartRecording();
    }
    public void SourceStreamDataAvailable(object sender, WaveInEventArgs e) {
    if (waveWriter == null) return;
    waveWriter.Write(e.Buffer, 0, e.BytesRecorded);
    waveWriter.Flush();
    }
    private void RecordEnd(object sender, EventArgs e) {
    if (sourceStream != null) {
    sourceStream.StopRecording();
    sourceStream.Dispose();
    sourceStream = null;
    }
    if (this.waveWriter == null) {
    return;
    }
    this.waveWriter.Dispose();
    this.waveWriter = null;
    recordEndButton.Enabled = false;
    Application.Exit();
    Environment.Exit(0);
    }
    }
    • Podemos obtener los Altavoces de audio también ?

Dejar respuesta

Please enter your comment!
Please enter your name here