当然也可以播放普通有损音频der~
独家原创,这篇文章你找遍世界都找不到第二篇!

事情是这样的,NAudio支持的格式有限,而且都是硬转,然后CSCore默认支持的也不多,甚至更少;西喀西,CSCore自带一个FFmpeg拓展,这样不用我多说了吧,支持格式一下子超了NAudio!但是博主又是NAudio用得比较熟,于是参考NAudio的WaveStream接口设计把CSCore转化到NAudio里播放,当然既然正着能转,反着肯定可以转!

目前能补充NAudio无法解码的常见无损格式有:tta,tak,dsf/dff/dsd/diff等 有损常见格式有mpc等,立体声dts,具体可以翻FFmpeg的支持格式;另外所有的视频里的音频也可以全部支持!比如可以播放mp4,avi,mkv,webm里的音频(只要带音频),是不是非常酷炫?

看到这里其实稍微有点代码能力的可以动手实践一下了,你可以做出比Foobar2K更好的播放器的!

Just show me the CODE!:

头文件:

using CSCore;
using CSCore.Ffmpeg;
using NAudio.Wave;
using Imouto.Audio;

解码端:

namespace Imouto.Audio
{/// <summary>/// <see cref="WaveStream"/> for reading Audio files/// </summary>public class FFmpegAudioReader : WaveStream{private IWaveSource ffmpegDecoder;private readonly NAudio.Wave.WaveFormat waveFormat;public override NAudio.Wave.WaveFormat WaveFormat{get { return waveFormat; }}public override long Length{get {if (ffmpegDecoder != null)return ffmpegDecoder.Length;return 0;}}public override long Position { get{if (null != ffmpegDecoder)return ffmpegDecoder.Position;return 0;}set{if (null != ffmpegDecoder)ffmpegDecoder.Position = value;}}public FFmpegAudioReader(string filename){ffmpegDecoder = new FfmpegDecoder(filename);if(null!= ffmpegDecoder){int sampleRate = ffmpegDecoder.WaveFormat.SampleRate;int bitsPerSample = ffmpegDecoder.WaveFormat.BitsPerSample;int channels = ffmpegDecoder.WaveFormat.Channels;this.waveFormat = new NAudio.Wave.WaveFormat(sampleRate, bitsPerSample, channels);}}//fill pcm data to bufferpublic override int Read(byte[] buffer, int offset, int count){if (null != ffmpegDecoder){byte[] tempBuf = new byte[count];count = ffmpegDecoder.Read(tempBuf, 0, tempBuf.Length);Buffer.BlockCopy(tempBuf, 0, buffer, 0, count);return count;}else{return 0;}}protected override void Dispose(bool disposing){if (null != ffmpegDecoder)ffmpegDecoder.Dispose();}}
}

播放Demo:

 FFmpegAudioReader audioReader = new FFmpegAudioReader(url);var waveOut = new NAudio.Wave.WaveOut();waveOut.Init(audioReader);waveOut.Play();Console.ReadKey();//控制台播放必须加这条阻塞代码,不然直接跳出了!

使用到了这些解码库,原则上可以官方下载最新版,可能支持格式更多!

但是WavPack并不是所有的版本或类型都支持,但是这个可以参考博主上一篇博文用NAudio的BufferedWaveProvider缓冲播放解压的PCM数据
指路:https://blog.csdn.net/weixin_44029053/article/details/122711501
原则上你可以把音频看成是带压缩的PCM数据!我们要做的就是解压后把PCM按规律塞到系统的音频播放接口

关于DSD:

一般DSD格式主要有*.dsf(Sony定制)和*.dff(Philips定制)
可以看这篇播放详细了解:https://www.techbang.com/posts/22079-unlocking-the-mystery-of-dsd-the-dsd-digital-audio-coding-vs-pcm

PS:播放DSD格式音频不要用上面接口,因为上面那个是基于PCM(線性脈衝編碼調變編碼)的,而DSD是基于PDM(脈衝密度調變編碼)的,用CSCore原生播放接口(这里的IWaveSource 是CScore原版的):

          string url = System.IO.File.ReadAllText("aaa.txt");Stream stream = null;//File.OpenRead(url);//we could also easily pass the filename as url//but since we want to test the decoding of System.IO.Stream, we//pass a FileStream as argument.IWaveSource ffmpegDecoder = (stream == null) ? new FfmpegDecoder(url) : new FfmpegDecoder(stream);using (stream)using (ffmpegDecoder)using (var wasapiOut = new CSCore.SoundOut.WasapiOut()){wasapiOut.Initialize(ffmpegDecoder);wasapiOut.Play();Console.WriteLine("..end..2");Console.ReadKey();//控制台播放需要加上这句阻塞}

也不推荐DSD格式转化为PCM的,这是一个有损过程,因为一般DSD码率会更高

下一步:博主将用这个工具无损格式互相转换,比如把Wavpack转化为Flac
(PS:博主其实已经实现了NAudio端PCM转Flac,就差整理代码啦!)

【脑洞大开:C# CSCore转NAudio播放所有无损音频格式】相关推荐

  1. 苹果公司正在开发一种专用的无损音频格式,使苹果 AirPods 可以播放这种无损音频

    5 月 20 日消息,苹果公司正在开发一种专用的无损音频格式,使苹果 AirPods 可以播放这种无损音频.此前苹果宣布,Apple Music将为曲库中的上千万首歌曲带来无损音频选项. 目前,苹果的 ...

  2. 我看无损音频APE和FLAC

    我在最近一次下载时才了解到还有一种FLAC格式的音频,跟APE一样都是无损压缩. 今天,又发现了目前市场上有不少MP3.MP4播放器都纷纷支持这两种无损格式,号称音质直逼CD. 那么,究竟什么是APE ...

  3. 支持Apple Music无损音频的耳机型号以及iPhone、iPad

    苹果公司声称,所有苹果音乐用户都可以使用"苹果无损音乐"获得更好的音频,但是要获得全部收益,需要软件和硬件.就是您需要的AirPods,耳机或其他硬件. Apple Music将在 ...

  4. X Lossless Decoder for mac(XLD无损音频转码软件)

    X Lossless Decoder(也称为XLD)是一款简单易用的无损音频转码软件,能够解码/转换/播放各种"无损"音频文件.解码时,支持的音频文件可以使用cue表分割成一些轨道 ...

  5. 数字媒体播放器音频格式

    数字媒体播放器音频格式 有数字媒体播放器和这些仍在扩大多种音频格式,可今天.您可能会看到对这些文件类型的编解码器.该编解码器是指需要进行编码和解码(编码解码简称为编码器)的算法. 在过去的数字音频播放 ...

  6. python录音播放_“Duang”:用Python播放和录制音频2019-07-10

    内容 如果想用Python来播放或录制声音,那您就来对地方了!在本教程中,您将学习如何使用一些最流行的音频库在Python中播放和录制声音.您将首先了解最直接的播放和录制声音的方法,然后您将了解一些能 ...

  7. NAudio 播放流、字节数组(非wav、mp3、aiff格式)

    NAudio 播放流.字节数组(非wav.mp3.aiff格式) 1. 问题 http或websocket通信返回的音频数据流,导出到音频文件,然后再用AudioFileReader读取文件流,可以播 ...

  8. 硬件解码轻松播放各种4K/1080P/720P的高清视频,普通音频和无损音频

    OmniPlayer mac中文版是一款几乎适用于所有格式的多媒体播放器,可以更好的帮助用户去体验播放器的视觉,OmniPlayer mac下载能够通过硬件解码轻松播放各种4K/1080P/720P的 ...

  9. vpr文件转换flac_关于便携播放器音频格式转换的问题

    目前消费类音乐播放手机主要有手机,播放器,和一些普通的MP3. 手机阵营主要分为安卓和苹果,还有软妹. 苹果主要为Iphone,支持的无损格式为m4a,wav,并不支持主流的Flac,此外对码率也有一 ...

最新文章

  1. 美国 2006 年机器学习和知识发现年会数据挖掘使用率较高算法排名
  2. 【opencv】6.视频编码格式与封装格式
  3. sql server 2005 在 windows7 报 IIS Feature Requirement 错误。解决办法。
  4. springboot学习笔记(二)
  5. 转载:【opencv入门教程之一】:配置
  6. 南邮 Android 课程设计,南邮大四课程设计.doc
  7. matlab软件moran值,用matlab求moran并作图的具体步骤
  8. Windows GVim
  9. teradata 数据定义
  10. Capsule:支持容器的JVM应用程序打包部署工具
  11. android创建wifi热点,Android 4.0.3创建wifi热点API
  12. netstat 用法
  13. 浅析busybox如何集成到openwrt
  14. apache netbeans ide为什么安装不了_Eclipse安装及常见的基于Eclipse的嵌入式集成开发环境...
  15. 某车企笔试题解答(2)
  16. matlab股票5日移动均线,一分钟,看懂五日均线图!
  17. 计算机定时关机计划任务失败,如何设置定时关机任务?电脑设置定时关机任务方法...
  18. java 编写桌面_利用Java技术编写桌面软件基础
  19. Git在windows和linux安装教程
  20. TRANSFORMER TRANSDUCER: A STREAMABLE SPEECH RECOGNITION MODELWITH TRANSFORMER ENCODERS AND RNN-T

热门文章

  1. ubuntu18将现有系统打包成iso
  2. Unity3D研究院之FBX模型的载入与人物行走动画的播放(十二)
  3. 利用iOS ARKit制作AR传送门
  4. win10开启Linux蓝屏,win10开启蓝屏错误代码显示的方法介绍
  5. 内容型平台运营的底层逻辑方法论
  6. MIMIC-III数据库的应用现状(综述)
  7. Wondershare DVD Creator for Mac(强大的DVD工具箱)
  8. C/C++ TCHAR* 作为函数返回值的问题
  9. SAP 下载资源文件模板
  10. bilibili 2020 校招面试题程序题