银河麒麟系统中使用C#获取电脑音频数据的完整实现代码
<p>以下是在银河麒麟系统中使用C#获取电脑音频数据的完整实现代码,结合Oraycn组件和跨平台技术方案:</p><p>一、核心代码实现<br>
csharp<br>
Copy Code<br>
using System;<br>
using Oraycn.LinuxCapture;<br>
using Oraycn.MFile.NetCore;</p>
<p>public class AudioCaptureDemo<br>
{<br>
private AudioCapturer _audioCapturer;<br>
private MFileWriter _mFileWriter;</p>
<pre><code>public void StartCapture(string outputPath)
{
// 1. 初始化音频采集器
_audioCapturer = CapturerFactory.CreateAudioCapturer();
_audioCapturer.BitsPerSample = 16; // 16位采样深度
_audioCapturer.SampleRate = 44100; // 44.1kHz采样率
_audioCapturer.ChannelCount = 2; // 立体声:ml-citation{ref="1,4" data="citationList"}
// 2. 初始化MP4文件写入器
_mFileWriter = new MFileWriter(outputPath,
new VideoFormat(), // 视频格式(留空仅音频)
new AudioFormat {
BitsPerSample = 16,
SampleRate = 44100,
ChannelCount = 2
}); // 音频格式配置:ml-citation{ref="1" data="citationList"}
// 3. 绑定数据捕获事件
_audioCapturer.AudioDataCaptured += (sender, e) =>
{
// 原始PCM数据写入MP4容器
_mFileWriter.WriteAudioFrame(e.Data, e.Data.Length);:ml-citation{ref="1,4" data="citationList"}
/* 如需实时处理音频数据:
float[] samples = new float;
for (int i = 0; i < samples.Length; i++) {
samples = BitConverter.ToInt16(e.Data, i * 2) / 32768f;
}
// 在此添加音频分析逻辑
*/
};
// 4. 开始采集
_audioCapturer.Start();
Console.WriteLine("音频采集已启动...");
}
public void StopCapture()
{
_audioCapturer?.Stop();
_mFileWriter?.Close();
Console.WriteLine("采集已停止,文件已保存");
}
</code></pre>
<p>}<br>
二、调用示例<br>
csharp<br>
Copy Code<br>
class Program<br>
{<br>
static void Main()<br>
{<br>
var demo = new AudioCaptureDemo();<br>
demo.StartCapture("/home/user/audio_record.mp4");</p>
<pre><code> Console.WriteLine("按任意键停止采集...");
Console.ReadKey();
demo.StopCapture();
}
</code></pre>
<p>}<br>
三、关键配置说明<br>
依赖部署</p>
<p>需将Oraycn.LinuxCapture.so和Oraycn.MFile.NetCore.so放置于/usr/local/lib/目录12<br>
通过export LD_LIBRARY_PATH=/usr/local/lib设置库路径8<br>
权限处理</p>
<p>bash<br>
Copy Code</p>
<h1 id="添加当前用户到audio用户组">添加当前用户到audio用户组</h1>
<p>sudo usermod -aG audio $USER</p>
<h1 id="修改alsa设备权限">修改ALSA设备权限</h1>
<p>sudo chmod 666 /dev/snd/*<br>
信创环境验证</p>
<p>需确认系统已安装.NET Core 6.0+运行时1<br>
建议使用ldd命令检查动态库依赖完整性8<br>
注:该方案同样适用于统信UOS系统,实际采样率需根据硬件支持情况调整16。如需实时传输音频流,可参考OMCS框架的网络传输实现6</p><br><br>
来源:https://www.cnblogs.com/ailonchen/p/18842784
頁:
[1]