我使用的是NAudio与
WaveOutEvent Klangwiedergabegeraet;
private void Play(string Dateiname)
{
Klangwiedergabegeraet = new WaveOutEvent();
Klangwiedergabegeraet.DeviceNumber = comboBox1.SelectedIndex;
ISampleProvider StueckchenHalter = null;
StueckchenHalter = CreateInputStreamS(Dateiname);
Klangwiedergabegeraet.Init(new SampleToWaveProvider(StueckchenHalter));
Klangwiedergabegeraet.Play();
}
private void Cancel()
{
if (Klangwiedergabegeraet != null)
{
Klangwiedergabegeraet.Stop();
Klangwiedergabegeraet.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
在跑步时Cancel(),它不会停止.我用的时候
WaveOut Klangwiedergabegeraet;
private void Play(string Dateiname)
{
Klangwiedergabegeraet = new WaveOut();
...
}
private void Cancel()
{
if (Klangwiedergabegeraet != null)
{
Klangwiedergabegeraet.Stop();
Klangwiedergabegeraet.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
有效.为什么这会改变什么?
PS我用WaveOutEvent而不是WaveOut因为WaveOut没有属性DeviceNumber …
我需要选择waveout设备,播放声音.但我不能这样做.
void Initialize()
{
_WaveOut = new WaveOut();
var reader = new WaveFileReader(FileName);
_WaveOut.Init(new WaveChannel32(reader));
}
Run Code Online (Sandbox Code Playgroud)
此函数启动,然后表单开始.在我的表单上,我选择带有组合框的waveout设备.Combobox是这段代码:
for (int i = 0; i < WaveOut.DeviceCount; i++)
{
WaveOutCapabilities WOC = WaveOut.GetCapabilities(i);
comboBox2.Items.Add(WOC.ProductName);
}
Run Code Online (Sandbox Code Playgroud)
在此之后,我选择了我的设备.
int WaveOutDeviceId = comboBox2.SelectedIndex;
Run Code Online (Sandbox Code Playgroud)
并启动Play功能:
void Play()
{
_WaveOut.DeviceNumber = WaveOutDeviceId;
_WaveOut.Play();
}
Run Code Online (Sandbox Code Playgroud)
但我的声音总是在默认设备上播放(数字= 0).如果我这样做麦克风,这段代码可以正常工作.
我正在尝试用NAudio写一个峰值音量表.我的代码与http://channel9.msdn.com/coding4fun/articles/NET-Voice-Recorder非常相似,但我的代码和链接的录音机项目都遇到了问题.
当播放恒定频率和音量的声音时,音量计最初开始于合理的水平,但随后衰减到非常小的值.我不确定为什么会这样,因为NAudioDemo中的峰值音量表不会这样做.我试图在程序中复制NAudioDemo中的代码,但是我无法找到包含峰值音量表代码的代码文件.
有人可以指导我创建峰值音量计的替代解决方案,或者帮助我确定为什么我的解决方案(以及链接中提供的解决方案)都不起作用?
public MainWindow()
{
int waveInDevices = WaveIn.DeviceCount;
for (int waveInDevice = 0; waveInDevice < waveInDevices; waveInDevice++)
{
WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(waveInDevice);
Console.WriteLine("Device {0}: {1}, {2} channels",
waveInDevice, deviceInfo.ProductName, deviceInfo.Channels);
WaveIn waveIn = new WaveIn();
waveIn.DeviceNumber = 0; //TODO: Let the user choose which device, this comes from the device numbers above
waveIn.DataAvailable += waveIn_DataAvailable;
int sampleRate = SAMPLE_RATE; // 8 kHz
int channels = 1; // mono
waveIn.WaveFormat = new WaveFormat(sampleRate, channels);
waveIn.StartRecording();
}
} …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,将麦克风的音频记录到文件(.mp3).我希望我的应用程序仅在检测到足够高的幅度时才将数据写入文件.我在尝试保存所选数据时遇到问题.我得到的只是一个快速失真,甚至没有记录下来.
这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NAudio.Wave;
namespace NAudio_Testing
{
public partial class Form1 : Form
{
int counter = 0;
int passed = 0;
private BufferedWaveProvider bufferedWaveProvider;
WaveIn waveIn;
WaveFileWriter writer;
string output = "C:/Users/klein/AppData/Roaming/Microsoft/Windows/gravacao.mp3";
public Form1()
{
InitializeComponent();
waveIn = new WaveIn();
writer = new WaveFileWriter(output, waveIn.WaveFormat);
waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(new_dataAvailable);
bufferedWaveProvider = new BufferedWaveProvider(waveIn.WaveFormat);
bufferedWaveProvider.DiscardOnBufferOverflow = true;
waveIn.StartRecording();
}
private void Form1_Load(object …Run Code Online (Sandbox Code Playgroud) 我在Naudio文档中看到了一个示例,它将MP3流转换为WAV流.我怀疑的是,Naudio反过来做了吗?也就是说,它可以将WAV流转换为MP3流吗?如果是,请解释如何或帮助我一些参考.
我正在尝试使用C#捕获麦克风声音,并且我已经在Google上搜索了此内容,而我所获得的全部是非.Net库,我只获得了开源的Like NAudio和其他类似的内容,DirectX并且DirectX.DirectSound这些内容适用于C#这样的托管语言,但是那不是我想要的。而且我都尝试了它们,我在NAudio
http://voicerecorder.codeplex.com/中使用了这个开源项目作为参考,
并且我设法捕获声音,然后将其输出到扬声器或耳机上,但是当我仍然遇到问题时,保存Wav文件,但我想知道是否有任何.Net内置库可以帮助我实现目标?
谢谢您的帮助:)
我有2个文件.两者的长度相同(以秒为单位):
如何在我的C#应用程序中使用NAudio .NET库用文件#2中的音频覆盖文件#1的音频?我想将最终结果写入磁盘作为新的视频文件.
我相信这可以使用NAudio 1.7的Media Foundation功能,但我无法弄清楚如何修改视频文件的音频流并重新保存视频.
我有以下代码将音频文件的样本读入字节数组.
int signal_read = signal.Read(signal_sample, 0, signal_length);
MessageBox.Show(signal_read + "");
Run Code Online (Sandbox Code Playgroud)
哪个signal是WaveFileReader类的对象.
MessageBox.Show始终显示从软件Audacity获取的实际样本数的两倍.
难道read方法无法返回读取的音频样本的数量?
我正在编写一个软件,以竞争的方式比较两位歌手的演唱能力.第一个用户添加原始歌手原创的音乐文件.然后,软件自动将语音与音频隔离,然后与用户记录的音频进行比较.
到目前为止,我无法找到这个FFT方法的源或任何其他工具来隔离语音.
以下C#NAudio代码与MATLAB产生的结果相差4倍。为什么会发生这种情况,其中之一是不正确的吗?
Complex[] tmp = new Complex[4];
tmp[0].X = 1.0f;
tmp[1].X = 0.5f;
tmp[2].X = 1.0f;
tmp[3].X = 0.25f;
tmp[0].Y = 0.0f;
tmp[1].Y = 0.0f;
tmp[2].Y = 0.0f;
tmp[3].Y = 0.0f;
FastFourierTransform.FFT(true, 2, tmp);
Run Code Online (Sandbox Code Playgroud)
NAUDIO输出:
0.6875 + 0.0000i
0.0000 - 0.0625i
0.3125 + 0.0000i
0.0000 + 0.0625i
Run Code Online (Sandbox Code Playgroud)
MATLAB输出:
2.7500 + 0.0000i
0.0000 - 0.2500i
1.2500 + 0.0000i
0.0000 + 0.2500i
Run Code Online (Sandbox Code Playgroud)