You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于NAudio的NETCore平台任意音频转GSM格式的简便实现方法咨询

.NET Core 音频转GSM格式实现方案

前置依赖

安装NAudio NuGet包:

dotnet add package NAudio

注意:MediaFoundationReader依赖Windows系统MediaFoundation组件,仅支持Windows平台运行,跨平台场景可替换为FFmpeg相关解码组件。

完整代码

using NAudio.Wave;
using NAudio.MediaFoundation;

public static bool ConvertToGsm(string sourcePath, string destPath)
{
    try
    {
        // MediaFoundation初始化全局仅需执行一次,可迁移到程序启动逻辑
        MediaFoundationApi.Startup();

        using (var sourceReader = new MediaFoundationReader(sourcePath))
        {
            // GSM编码器输入要求为16位、8kHz、单声道PCM,先做重采样
            var targetPcmFormat = new WaveFormat(8000, 16, 1);
            using (var resampler = new MediaFoundationResampler(sourceReader, targetPcmFormat))
            {
                // 生成标准GSM 6.10编码格式
                var gsmFormat = WaveFormat.CreateCustomFormat(
                    WaveFormatEncoding.Gsm610, 
                    8000, 
                    1, 
                    1625, 
                    65, 
                    2
                );
                // PCM转GSM编码流
                using (var conversionStream = new WaveFormatConversionStream(gsmFormat, resampler))
                {
                    // 写入目标WAV文件
                    WaveFileWriter.WriteWavFileToStream(destPath, conversionStream);
                }
            }
        }
        return true;
    }
    catch
    {
        // 可自行添加异常日志记录逻辑
        return false;
    }
}

关键说明

  • 原代码中定义的WaveFormat(8000, 8, 1)是8位无压缩PCM格式,不是标准GSM编码格式,需用WaveFormat.CreateCustomFormat生成GSM编码配置
  • 所有IO、编码流都需要用using包裹,避免资源泄漏导致文件被锁定
  • 重采样是必须步骤:绝大多数源音频的参数不符合GSM编码器输入要求,必须先转成16位8kHz单声道PCM再做编码
  • 全局仅需调用一次MediaFoundationApi.Startup(),不需要每次转换都执行,可放到程序启动初始化逻辑中提升性能

跨平台适配

如果需要在Linux、macOS环境运行,可将解码和重采样逻辑替换为FFmpeg.AutoGen等跨平台音视频处理库,GSM编码转换逻辑可直接复用。

内容的提问来源于stack exchange,提问作者mordechai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:00:05