我正在尝试在 Windows 上检测耳机是否已插入。我已经尝试过 DirectSound 和 NAudio 库,但没有取得任何成功。有没有人有什么建议?
注意:此问题与此问题重复,但该问题的答案不包含任何代码示例或教程。
我正在开发一个 C# WPF 应用程序,它将一组单词(大约 17,000 个单词)组合在一起,并生成一个与 mp3 文件匹配的播放列表(每个 mp3 文件都是一个单词)。
目前,每个 mp3 文件在其波形结束时都有 1 秒到 30 秒之间的随机静音。
我希望能够以编程方式从文件末尾删除静音波。
使用 NAudio for .NET 如何删除 mp3 文件末尾的静音波?
我正在尝试转换
PCM S16 LE (araw)
Mono, Sample rate 22050, Bit pr. sample 16
Run Code Online (Sandbox Code Playgroud)
到
PCM mulaw (PCM MU-LAW)
Mono, Sample rate 8000hz, Bit pr. sample is 8.
Run Code Online (Sandbox Code Playgroud)
WaveFormat.CreateMuLawFormat(8000,1)或者甚至是更通用的WaveFormat.CreateCustomFormat,我指定WaveFormatEncoding与源流相同的内容会抛出相同的异常。
AcmNotPossible calling acmStreamOpen
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
任何线索将不胜感激。
我正在对吉他(小提琴)英雄进行克隆编程,作为本学年的期末项目。
这个想法是从我的电小提琴中获取输入,通过 FFT 对其进行分析,进行一些逻辑和绘图,然后通过扬声器输出。也许并行线程中的一些步骤。
我已经实现了 Asio 低延迟输入输出,但在实现实时 FFT 时遇到了很大的问题。
这是设置 asioOut 和 SampleAggregator 的代码。样本聚合器应存储每次调用 AudioAvailable() 时添加的样本,并在样本数量超过 fftLength 时触发 FFT 计算。
private static int fftLength = 8192;
private SampleAggregator sampleAggregator = new SampleAggregator(fftLength);
void asioStartPlaying(object sender, EventArgs e)
{
sampleAggregator.PerformFFT = true;
sampleAggregator.FftCalculated += new EventHandler<FftEventArgs>(FftCalculated);
var asioOut = new AsioOut();
BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 1));
asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs> (asio_DataAvailable);
asioOut.InitRecordAndPlayback(wavprov, 1, 25);
asioOut.Play();
}
void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e)
{
byte[] buf = new byte[e.SamplesPerBuffer*4];
for (int …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 NVorbis 和 NAudio 播放 OGG 文件流,如文档中所述,我正在尝试访问 VorbisWaveReader 类,但没有成功,这是我的代码:
using System;
using System.Collections.Generic;
using System.Text;
using NVorbis;
using NAudio;
namespace Paradise
{
class Program
{
static void Main(string[] args)
{
using (var vorbis = new NVorbis.NAudioSupport.VorbisWaveReader(@"C:\PATH\TO\OGG\FILE.ogg"))
using (var waveOut = new NAudio.Wave.WaveOut())
{
waveOut.Init(vorbis);
waveOut.Play();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
type or namespace name 'VorbisWaveReader' does not exist in the namespace 'NVorbis.NAudioSupport'
Run Code Online (Sandbox Code Playgroud)
它看起来非常基本并且应该可以工作,我可以在源代码中看到代码中存在 VorbisWaveReader,你能帮我完成这个任务吗?
谢谢!
我想通过 NAudio 录制来自 WASAPI 环回的原始音频,并通过管道传输到 FFmpeg 以通过内存流进行流式传输。从这个文档开始,FFmpeg 可以作为原始输入但是,我得到了 8~10 倍的结果速度!这是我的代码:
waveInput = new WasapiLoopbackCapture();
waveInput.DataAvailable += new EventHandler<WaveInEventArgs>((object sender, WaveInEventArgs e) =>
{
lock (e.Buffer)
{
if (waveInput == null)
return;
try
{
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
{
memoryStream.Write(e.Buffer, 0, e.Buffer.Length);
memoryStream.WriteTo(ffmpeg.StandardInput.BaseStream);
}
}
catch (Exception)
{
throw;
}
}
});
waveInput.StartRecording();
Run Code Online (Sandbox Code Playgroud)
FFmpeg 参数:
ffmpegProcess.StartInfo.Arguments = String.Format("-f s16le -i pipe:0 -y output.wav");
Run Code Online (Sandbox Code Playgroud)
1.有人可以解释这种情况并给我一个解决方案吗?
2. 我是否应该将 Wav 标头添加到内存流,然后以 Wav 格式通过管道传输到 FFmpeg?
工作解决方案
waveInput = new WasapiLoopbackCapture();
waveInput.DataAvailable …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个可以记录屏幕同时可以记录输入和输出音频的应用程序。我在网上查了很多东西,但找不到任何可以一起做的事情。
我试图用sharpavi 和naudio 做一些事情。底部的代码可以录制来自麦克风的声音的屏幕,也可以录制来自扬声器的声音。问题是来自麦克风的屏幕视频和音频会创建一个视频文件,而来自 spearkes 的声音会创建其他 mp3 文件。(如果我的老板想做我做不到的事情:)
所以我想创建包含屏幕记录、输入和输出语音的视频文件。我希望你能帮助我。
private readonly int screenWidth;
private readonly int screenHeight;
private readonly AviWriter writer;
private readonly IAviVideoStream videoStream;
private readonly IAviAudioStream audioStream;
private readonly WaveInEvent audioSource;
private readonly Thread screenThread;
private readonly ManualResetEvent stopThread = new ManualResetEvent(false);
private readonly AutoResetEvent videoFrameWritten = new AutoResetEvent(false);
private readonly AutoResetEvent audioBlockWritten = new AutoResetEvent(false);
WasapiLoopbackCapture capture = new WasapiLoopbackCapture();
WaveFileWriter writerx;
public Recorder(string fileName,
FourCC codec, int quality,
int audioSourceIndex, SupportedWaveFormat audioWaveFormat, bool encodeAudio, int audioBitRate) …Run Code Online (Sandbox Code Playgroud) 以编程方式启用记录设备
我想以编程方式启用录音设备列表中禁用的设备
我能够使用Naudio获得禁用设备的列表
但是没有办法使用 Naudio 启用它。
所以我也尝试使用IMMDevice 接口,但我不知道如何做到这一点。
我也试过注册表编辑
//Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{87bd5990-b012-41f1-83f7-f267ed7780a7}
RegistryKey root = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Microsoft", true).OpenSubKey("Windows", true).OpenSubKey("CurrentVersion", true).OpenSubKey("MMDevices", true).OpenSubKey("Audio", true).OpenSubKey("Render", true).OpenSubKey("{87bd5990-b012-41f1-83f7-f267ed7780a7}", true); //{87bd5990-b012-41f1-83f7-f267ed7780a7} any Playback Device ID
MessageBox.Show($"Value Before {root.GetValue("DeviceState")} { root.GetValueKind("DeviceState")}");
root.SetValue("DeviceState", 0x10000001, RegistryValueKind.DWord);
MessageBox.Show($"Value After {root.GetValue("DeviceState")} { root.GetValueKind("DeviceState")}");
Run Code Online (Sandbox Code Playgroud)
或者
Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{87bd5990-b012-41f1-83f7-f267ed7780a7}", "DeviceState", 0x10000001, RegistryValueKind.DWord);
Run Code Online (Sandbox Code Playgroud)
但这需要管理员权限,我希望它适用于任何用户。
我终于构建了一个程序来使用 NAudio 收听内部音频环回,并输出识别的文本。问题是它会倾听,并且总是说,例如:
Recognized text: had
Recognized text: had
Recognized text: had
Recognized text: had
Recognized text: had had phone Le K add phone Laton
Recognized text: had phone looked had phone looked had phone looked had phone lo
oked zone
Recognized text: had phone lines to had, had phone looked had phone looked had p
hone line had phone
Recognized text: had phone line had phone looked had phone
Recognized text: had phone looked had phone looked had phone …Run Code Online (Sandbox Code Playgroud)