标签: cscore

C#录制声卡的音频

我想录制声卡(输出)中的音频.我在codeplex上找到了CSCore,但我找不到任何例子.有谁知道如何使用库来录制声卡中的音频并将记录数据写入硬盘?或者有人知道该库的一些教程吗?

c# audio audio-recording cscore

17
推荐指数
1
解决办法
3万
查看次数

使用实时流进行语音识别

首先,为了阐明我的目标:我使用CSCore库并使用WasapiLoopbackCapture该类捕获背景音频,我打算将其用作System.Speech.Recognition识别引擎的实时输入.该类将数据输出到.WAV文件或Stream.然后我尝试这样做:

    private void startButton_Click(object sender, EventArgs e)
    {
        _recognitionEngine.UnloadAllGrammars();
        _recognitionEngine.LoadGrammar(new DictationGrammar());

        LoadTargetDevice();
        StartStreamCapture(); // Here I am starting the capture to _stream (MemoryStream type)

        _stream.Position = 0; // Without setting this, I get a stream format exception.

        _recognitionEngine.SetInputToWaveStream(_stream);
        _recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
    }
Run Code Online (Sandbox Code Playgroud)

结果是我没有得到异常,但我也没有得到SpeechRecognizedSpeechDetected事件被触发.我怀疑这是因为System.Speech.Recognition程序集不支持实时流.我在网上搜索,有人报告实施自定义Stream类型作为解决方法,但我无法按照帖子上的说明进行操作,这些说明不明确(请参阅Dexter Morgan的回复).

我知道这个问题最好通过使用不同的库或替代方法来解决,但我想知道如何专门做这个临时实现,主要是出于知识目的.

谢谢!

c# windows audio speech-recognition cscore

9
推荐指数
1
解决办法
650
查看次数

将麦克风输入定向到扬声器并使用CSCore库编写自定义DSP功能

CSCore(https://github.com/filoe/cscore)似乎是一个非常好的C#音频库,但它缺乏文档和很好的例子.

我一直在玩Bass.Net很长一段时间,CSCore的架构不像Bass库,所以很难找到正确的方法来完成一些常见的任务.

我正在尝试从WasapiCapture设备捕获麦克风输入并将记录的数据输出到WasapiOut设备,但我无法成功.

以下是我在谷歌搜索后可以找到的代码,但它不起作用.

MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator();
MMDeviceCollection devices = deviceEnum.EnumAudioEndpoints(DataFlow.Capture, DeviceState.Active);

using (var capture = new WasapiCapture())
{
    capture.Device = deviceEnum.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Multimedia);
    capture.Initialize();

    using (var source = new SoundInSource(capture))
    {
        using (var soundOut = new WasapiOut())
        {
            capture.Start();

            soundOut.Device = deviceEnum.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
            soundOut.Initialize(source);
            soundOut.Play();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我要做的是写一个像这样的应用程序:http: //www.pitchtech.ch/PitchBox/

我有自己的DSP功能,我想将其应用于记录数据.

有没有人有将WasapiCapture指向WasapiOut并编写自定义DSP的例子?

编辑:

我在CSCore库创建者Florian Rosmann(filoe)的帮助下找到了解决方案.

这是一个DSP类,它放大了提供的音频数据.

class DSPGain: ISampleSource
{
    ISampleSource _source;
    public DSPGain(ISampleSource source)
    {
        if (source == null)
            throw new ArgumentNullException("source");
        _source …
Run Code Online (Sandbox Code Playgroud)

c# audio wasapi cscore

8
推荐指数
1
解决办法
1395
查看次数

波形文件的时间长度

我有一些简单的代码使用TTS生成一个wave文件,然后播放它:

public void TestSpeech()
{
    SpeechSynthesizer synth = new SpeechSynthesizer();
    using (MemoryStream stream = new MemoryStream())
    {
        synth.SetOutputToWaveStream(stream);
        synth.Speak("Hello world");
        stream.Seek(0, SeekOrigin.Begin);
        IWaveSource source = new WaveFileReader(stream);
        EventWaitHandle waitHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
        var soundOut = new WasapiOut();
        soundOut.Initialize(source);
        soundOut.Stopped += (s, e) => waitHandle.Set();
        soundOut.Play();
        waitHandle.WaitOne();
        soundOut.Dispose();
        source.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都工作正常,但我想知道在我开始播放wave文件之前会持续多长时间.有没有计算这个的方法,或者它可以在某个地方使用?

如果它在某处可用,它是如何计算的?我假设它与流中的数据量有关,但是如何?

c# cscore

8
推荐指数
1
解决办法
1998
查看次数

声音均衡器

几天后,我试图用C#创建一个均衡器.看过NAudio很多时间,但我找不到任何适用于naudio的均衡器.现在几天之后,我终于在@stackoverflow,希望你知道一种使用c#创建均衡器的方法.

PS:我也尝试过System.Media.SoundPlayer.但SoundPlayer甚至不支持任何与dsp有关的东西.那么还有另一个音频库可以在外面使用"纯"音频吗?

c# audio equalizer cscore

6
推荐指数
1
解决办法
1万
查看次数

如何将系统麦克风音频流传输到连接设备的麦克风音频流

我正在尝试连接用于远程呼叫的USB设备,它具有用于麦克风和扬声器的pnp声音控制器.现在我有两个扬声器和两个麦克风用于输入输出,如下图所示.<代码>扬声器</代码>MIC.现在我的动机是将音频流从系统麦克风传输到USB麦克风,从USB扬声器传输到系统扬声器.

我试图用虚拟有线电视软件来解决这个问题但是我需要依赖第三方.使用c#可以获得什么样的解决方案.

我对此并不了解,所以不知道如何开始.谷歌搜索后我找到了

  1. CS核心
  2. N音频

可以帮助我,我不知道如何.

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        List<NAudio.Wave.WaveInCapabilities> sources = new List<NAudio.Wave.WaveInCapabilities>();

        for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++)
        {
            sources.Add(NAudio.Wave.WaveIn.GetCapabilities(i));
        }

        sourceList.Items.Clear();

        foreach (var source in sources)
        {
            ListViewItem item = new ListViewItem(source.ProductName);
            item.SubItems.Add(new ListViewItem.ListViewSubItem(item, source.Channels.ToString()));
            sourceList.Items.Add(item);
        }
    }

    NAudio.Wave.WaveIn sourceStream,sourceStream1 = null;
    NAudio.Wave.DirectSoundOut waveOut = null;

    private void button2_Click(object sender, EventArgs e)
    {
        if (sourceList.SelectedItems.Count …
Run Code Online (Sandbox Code Playgroud)

.net c# audio-streaming naudio cscore

6
推荐指数
1
解决办法
1979
查看次数

将单个Windows应用程序当前音量输出级别视为在音频混音器中可视化

我正在尝试编写一个C#代码,用于从访问声音输出的每个窗口应用程序输出当前音频输出级别(如Volume混音器中不断变化的绿色条所示).

该程序将每10毫秒检查一次,并输出如下:Windows Media Player:30,Mozilla Firefox:0,Adobe Flash Player:35(根据图)

我正在使用Windows 7,并在C#中尝试它(因为Java无法实现这一点).

我已经找到了为正在运行的应用程序获取和设置主音量(对于Windows Media Player显示65%的句柄栏)的方法,有没有办法获得绿色波动的水平数据?

谢谢!

音频混音器

c# audio mixer wasapi cscore

5
推荐指数
1
解决办法
9944
查看次数

CSCore-实时流式传输系统音频

如何实时流式传输CSCore捕获的声卡输出音频?是否可以使用 FFMpeg 等库将其编码为 MPEG 音频流,然后使用 WebSocket 进行流式传输?

audio streaming ffmpeg websocket cscore

5
推荐指数
0
解决办法
676
查看次数

CSCore - 从 FileStream 或 MemoryStream 播放音频

使用 CSCore,如何从FileStreamor播放 WMA 或 MP3 MemoryStream(与使用string文件路径或 url的方法不同)。

audio cscore

5
推荐指数
1
解决办法
3520
查看次数

C# - 通过套接字连接的实时流音频

我正在尝试通过 tcp 套接字连接将音频从一台计算机单向流式传输到另一台计算机。

计算机 1 ---> 交换机 ---> 计算机 2

计算机 1 是发送方/客户端,计算机 2 是播放音频的接收方/服务器。

我设法让它发挥作用,但收到了很多噪音。

CS核心:

这是我目前用来发送数据的代码:

CaptureInstance = new WasapiLoopbackCapture();
CaptureInstance.Initialize();
CaptureInstance.DataAvailable += (s, a) => onStart(s, a);
CaptureInstance.Start();
Run Code Online (Sandbox Code Playgroud)

其中 onStart 只是使用 BinaryWriter 将字节写入套接字的流:

writer.Write(a.Data, a.Offset, a.ByteCount);
Run Code Online (Sandbox Code Playgroud)

这是我目前在接收计算机上用于播放音频的代码:

int size = 3840;
WriteableBufferingSource src = new WriteableBufferingSource(new CSCore.WaveFormat(48000, 32, 2)) { FillWithZeros = true };

WasapiOut soundOut = new WasapiOut();
soundOut.Initialize(src);
soundOut.Play();

while (true)
{
    byte[] bytes = reader.ReadBytes(size); // BinaryReader
    src.Write(bytes, 0, size);
}
Run Code Online (Sandbox Code Playgroud)

NA音频:

经过进一步的搜索、试验和错误,我设法使用 NAudio …

c# sockets audio naudio cscore

3
推荐指数
1
解决办法
2692
查看次数

静音时 CSCore 环回录音

CSCore.WasapiLoopbackCapture用来录制系统声音。但是当系统没有声音时,它根本不录音!例如,在播放音乐和录制音乐时,输出文件的持续时间小于曲目的持续时间。我希望它即使在系统中没有声音的情况下也能继续录制,但我没有找到任何属性来控制这种行为。这是我的代码片段:

WasapiCapture waveLoop = new WasapiLoopbackCapture();
waveLoop.Initialize();
waveLoop.DataAvailable += waveLoop_DataAvailable;
waveLoop.Stopped += waveLoop_Stopped;
waveLoop.Start();
Run Code Online (Sandbox Code Playgroud)

c# audio-recording cscore

2
推荐指数
1
解决办法
1514
查看次数

使用 CSCore lib 获取 MP3 文件样本数据和信息

我想使用库NReplayGain来计算 MP3 文件的重播,然后使用TagLibSharp库(带有非官方开源重播支持修改)将ID3v2重播标签写入文件。

好吧,这应该是使用 NReplayGain 库计算样本集重放增益的伪代码,正如他们的网站所示:https : //github.com/karamanolev/NReplayGain

Dim trackGain As New TrackGain(samplerate, samplesize)

For Each sampleSet As SampleSet In track
    trackGain.AnalyzeSamples(sampleSet.leftSamples, sampleSet.rightSamples)
Next

Dim gain As Double = trackGain.GetGain()
Dim peak As Double = trackGain.GetPeak()
Run Code Online (Sandbox Code Playgroud)

(...但如果我需要说实话,我不确切知道什么是 SampleSet(所有帧都加入了?))

试图计算sampleset的回放增益之前,我需要获得必要的数据,我需要传递给上面的代码,所以我需要得到的samplerateSampleSetleftSamplesrightSamples一个MP3文件。

我需要一个完整的代码示例,说明如何使用NAudiolib 或任何其他类型的 lib来检索这些数据。

我要求完整代码的原因是因为我知道我自己不能做到这一点,我在 NAudio 库之前接触了一些其他东西,对我来说非常困难,似乎libray 是专为音频大师程序员和音频大师编写的,没有任何简单的东西。

.net vb.net audio naudio cscore

0
推荐指数
1
解决办法
1995
查看次数