- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用NAudio(但它适用于直接读取)来捕获麦克风波数据。看来,如果我的应用程序很忙,它将丢弃/跳过麦克风中的一些输入数据。
我已将读取线程设置为最高优先级,但是我同时在其他多个线程中进行了大量计算。
有没有一种无损读取数据的方法?
(或者它是无损的,我的错误在其他地方吗?)
最佳答案
当我制作一个类似的应用程序并遇到类似的问题时,事实证明我需要一个缓冲区,该缓冲区可以保存至少3秒钟的数据。尝试将缓冲区增加到10秒的数据,如果不能解决您的问题,则还有更多问题。如果可行,请尝试减小缓冲区大小,直到正常工作为止
编辑:在这里快速和肮脏的管理dx录音,供您尝试。
public class BMSRecordingEventArgs : EventArgs
{
byte[] data;
bool endRec;
public BMSRecordingEventArgs(byte[] data, bool endRec)
{
this.data = data;
this.endRec = endRec;
}
public byte[] Data
{
get { return data; }
}
public bool EndRec
{
get { return endRec; }
}
}
public class AudioRecorder
{
public delegate void DataReceivedHandler(object sender, BMSRecordingEventArgs e);
public event DataReceivedHandler DataReceivedHandle;
public const int CAPTURE_BUFFER_SIZE = 32000;
DXS.Capture dxsCapDev;
DXS.CaptureBuffer dxsCapBuffer;
DXS.CaptureBufferDescription dxsCapBufferDesc;
System.Threading.Thread thrdCapturingThread;
DXS.BufferPositionNotify[] dxsBpna;
private volatile bool StopRec;
System.Threading.ManualResetEvent mreStillRunning = new System.Threading.ManualResetEvent(false);
DXS.BufferPositionNotify dxsBPNHalf;
DXS.BufferPositionNotify dxsBPNFull;
DXS.Notify Notify;
System.Threading.AutoResetEvent ARE;
public AudioRecorder(Guid DeviceGuid,DXS.WaveFormat wfWaveFormat,DXS.CaptureEffectDescription[] dxsCapEffectDesc)
{
dxsCapDev = new Microsoft.DirectX.DirectSound.Capture(DeviceGuid);
dxsCapBufferDesc = new Microsoft.DirectX.DirectSound.CaptureBufferDescription();
dxsCapBufferDesc.BufferBytes = CAPTURE_BUFFER_SIZE;
dxsCapBufferDesc.Format = wfWaveFormat;
dxsCapBufferDesc.WaveMapped = true;
dxsCapBufferDesc.CaptureEffectDescription = dxsCapEffectDesc;
dxsCapBufferDesc.ControlEffects = true;
dxsCapBuffer = new Microsoft.DirectX.DirectSound.CaptureBuffer(dxsCapBufferDesc, dxsCapDev);
ARE = new System.Threading.AutoResetEvent(false);
dxsBPNHalf = new Microsoft.DirectX.DirectSound.BufferPositionNotify();
dxsBPNFull = new Microsoft.DirectX.DirectSound.BufferPositionNotify();
dxsBPNHalf.Offset = CAPTURE_BUFFER_SIZE / 2 - 1;
dxsBPNFull.Offset = CAPTURE_BUFFER_SIZE-1;
dxsBPNFull.EventNotifyHandle = ARE.SafeWaitHandle.DangerousGetHandle();
dxsBPNHalf.EventNotifyHandle = ARE.SafeWaitHandle.DangerousGetHandle();
dxsBpna = new Microsoft.DirectX.DirectSound.BufferPositionNotify[2];
dxsBpna[0] = dxsBPNHalf;
dxsBpna[1] = dxsBPNFull;
Notify = new Microsoft.DirectX.DirectSound.Notify(dxsCapBuffer);
Notify.SetNotificationPositions(dxsBpna);
}
public void StartRecording()
{
if (thrdCapturingThread != null)
throw new Exception("Already Recording !");
StopRec = false;
thrdCapturingThread = new System.Threading.Thread(Record);
thrdCapturingThread.Start();
}
private void Record()
{
DataReceivedHandler drh2 = DataReceivedHandle;
dxsCapBuffer.Start(true);
byte[] TempBaf = new byte[CAPTURE_BUFFER_SIZE / 2];
int StartingOffset = 0;
while (dxsCapBuffer.Capturing && !StopRec)
{
ARE.WaitOne(-1,false);
StartingOffset %= CAPTURE_BUFFER_SIZE;
TempBaf = (byte[])dxsCapBuffer.Read(StartingOffset, typeof(byte), Microsoft.DirectX.DirectSound.LockFlag.FromWriteCursor, CAPTURE_BUFFER_SIZE / 2);
StartingOffset += TempBaf.Length;
if (drh2 != null)
drh2(this, new BMSRecordingEventArgs(TempBaf, false));
}
dxsCapBuffer.Stop();
if (drh2 != null)
drh2(this, new BMSRecordingEventArgs(TempBaf, true));
mreStillRunning.Set();
}
public void StopRecording()
{
StopRec = true;
mreStillRunning.WaitOne(-1,false);
thrdCapturingThread = null;
}
}
关于windows - 麦克风无损阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680224/
我想开发一个虚拟麦克风驱动程序。请不要说任何关于 DirectShow 的事情——那不是“方式”。我需要一个适用于任何软件(包括 Skype 和 MSN)的解决方案。而 DirectShow 不符合这
我想使用媒体记录器从我的android应用程序记录音频。我已将音频源设置为麦克风,这使我可以从麦克风进行录制。但是我也很乐意检测是否连接了任何外部麦克风。如果是这样,那么它应该从中录制音频。 例如:如
在此先感谢您的帮助。 我正在开发一个用于研究目的的 Android 应用程序,需要禁用软输入键盘上的语音到文本按钮。这样做的原因是由于我正在开发的应用程序使用麦克风而出现的并发问题。我知道对于一般的应
目前,我正在启动主程序,该程序控制何时启动扬声器和麦克风线程。从那里,我还可以控制设备(USB耳机)上的静音/取消静音等。音频线程位于音频类的单独文件中。 此代码有效。现在,它以预设的特定循环计数捕获
OSX 10.10.3 ,也可以在10.8上重现 系统偏好设置中音频输入的当前状态是: 输入音量设置为0 当我对着麦克风讲话时,我看到条形音箱的没有动画 是否可以从AppleScript中的该状态恢复
我的问题:我目前有一个声音文件,其中包含我录制的特定声音。我希望能够识别该声音何时再次播放超过2秒钟。音量对我来说并不重要,我希望能够识别出何时播放该特定音符。例如,该文件保存了音符A(la)的录音,
这个标题可能看起来很荒谬,但我有问题。我有服务捕获线路,并将文件作为声音文件保存在系统上(该服务不是我开发的,我必须使用它)。 所以我想编写程序来选择声音文件(*.wav、*.mp3 等),然后该声音
我正在尝试编写一个java程序通过UDP发送实时麦克风数据,然后在VLC中接收数据。我基本上使用与 this post 中相同的代码将流打包并发送出去。当我在 VLC 中接收数据时,我什么也没得到。我
我有一个 IP 语音应用程序,我只想通过单击按钮将内置麦克风静音。我该怎么做? 最佳答案 您真的不需要将麦克风静音,对吗?只是停止处理传入的音频。这不是 SDK 需要为您做的事情,而是您需要做的事情。
软呢帽上的 qt5.7 检查了这个audio-to-chart example并发现 QIODevice::writeData 用于读取麦克风输入。由于它有效并且正在绘制来自麦克风的数据,因此该功能显
我想做的是: 在工具栏中添加一个按钮(麦克风图像)。 点击该按钮后,iOS 默认语音听写应该会被调用。 > 查询:我假设我们不能调用默认语音听写但想确认。他们是否有任何解决方法或任何方法来通过单击工具
我正在尝试编写一个 DirectShow 音频捕获过滤器,它可以被 Microsoft Lync 客户端识别为 Microphone 源。这些是我已经采取的步骤: 过滤器派生自CSource;它的输出
在我目前的工作中,我们正在开发一个使用 WebRTC 技术的应用程序。 我们想要测试我们的应用程序与 30 位用户的实时工作情况——一个包含视频、声音和麦克风的电话 session (一切都必须正常)
这可能是一个非常愚蠢的问题,因为我对 AudioKit 和一般的 IOS 音频真的很陌生。我想要实现的是从我的麦克风录制一个剪辑(或只是一个简单的文件记录)。 我不希望我的应用程序将输入(从麦克风)直
我正在尝试使用 AVAudioEngine 获取实时麦克风输入的 float 据。进行一次fft和fft之后的特殊算法。 当我编译代码时,我在控制台上变成了这个输出:0x000000000000000
我需要一种方法来通过 PulseAudio(通过 bash)获取麦克风的当前“响度”。我指的是麦克风拾取的声音音量。 我想复制一个音量计,就像您在 pavucontrol 中看到的那样。 最佳答案 在
如果另一个程序正在使用我计算机的摄像头/麦克风,我正在尝试检查 python (ubuntu)。 我想到了访问相机/麦克风时正在使用哪些系统调用。 我知道正在使用系统调用“access”和“open”
我正在做一个项目,我需要用户能够录制屏幕、音频和麦克风。目前我只能让它识别屏幕和音频。 首先,我捕获屏幕和其中的音频并将其保存到变量中。然后我正在捕获该变量以显示视频组件。 invokeGetDisp
根据官方documentation Android 10 (API level 29) and higher imposes a priority scheme that can switch the
我正在尝试开发一个应用程序来记录双方(麦克风和扬声器)的通话。我已经看到有一个应用程序 vrecorder 为 android 1.6 提供这个 vrecorder。 现在我想为 android 2.
我是一名优秀的程序员,十分优秀!