Я могу захватить системный звук, который генерируется динамиком с помощью WasapiLoopbackCapture (naudio). но проблема заключается в том, что wav-файл и размер wav-файла очень большие (почти 10-15 МБ/мин). Я должен захватить 2-3-часовой звук, и это будет слишком высоким. Я ищу решение, которое преобразует поток wav, который захватывает WasapiLoopbackCapture, конвертирует в MP3, а затем сохраняет это на диске. Я стараюсь Late.exe или другого решения, но не добиваться успеха. Любой рабочий код.Преобразование WasapiLoopbackCapture wav аудиопоток в файл MP3
Вот мой код:
private void button1_Click(object sender, EventArgs e){
LoopbackRecorder obj = new LoopbackRecorder();
string a = textBox1.Text;
obj.StartRecording(@"e:\aman.mp3");
}
public class LoopbackRecorder
{
private IWaveIn _waveIn;
private Mp3WaveFormat _mp3format;
private WaveFormat _wavFormat;
private WaveFileWriter _writer;
private bool _isRecording = false;
/// <summary>
/// Constructor
/// </summary>
public LoopbackRecorder()
{
}
/// <summary>
/// Starts the recording.
/// </summary>
/// <param name="fileName"></param>
public void StartRecording(string fileName)
{
// If we are currently record then go ahead and exit out.
if (_isRecording == true)
{
return;
}
_fileName = fileName;
_waveIn = new WasapiLoopbackCapture();
// _waveIn.WaveFormat = new WaveFormat(16000, 16 , 2);
_writer = new WaveFileWriter(fileName, _waveIn.WaveFormat);
_waveIn.DataAvailable += OnDataAvailable;
// _waveIn.RecordingStopped += OnRecordingStopped;
_waveIn.StartRecording();
_isRecording = true;
}
private void OnDataAvailable(object sender, WaveInEventArgs waveInEventArgs)
{
if (_writer == null)
{
_writer = new WaveFileWriter(@"e:\aman.mp3", _waveIn.WaveFormat);
}
_writer.Write(waveInEventArgs.Buffer, 0, waveInEventArgs.BytesRecorded);
byte[] by= Float32toInt16(waveInEventArgs.Buffer, 0, waveInEventArgs.BytesRecorded);
}
private string _fileName = "";
/// <summary>
/// The name of the file that was set when StartRecording was called. E.g. the current file being written to.
/// </summary>
public string FileName
{
get
{
return _fileName;
}
}
}
Привет Я не могу добавить с помощью NAudio.Lame; в моем проекте Я пытаюсь добавить lame_enc.dll, также не добавляя в мой проект, могли бы вы рассказать мне, как добавить это пространство имен в мой проект. –
Привет, нет. Я могу добавить ref naudio.lame в мой проект, пока не отображается ошибка «Невозможно использовать локальную переменную waveIn» перед ее объявлением ». Я пробую это так: // Начните запись с петли IWaveIn waveIn = новый WasapiLoopbackCapture(); wri = new LameMP3FileWriter (@ "C: \ temp \ test_output.mp3", waveIn.WaveFormat, 128); waveIn.DataAvailable + = waveIn_DataAvailable; waveIn.RecordingStopped + = waveIn_RecordingStopped; waveIn.StartRecording(); stopped = false; , но он все еще показывает ошибку: -Поддерживаемый формат кодирования Расширяемый –
Привет, Кори, благодаря его работе для меня сейчас. да, его ошибка на 64-битных машинах. Любое обходное решение для решения этой проблемы. –