The classD driver DOES register itself as /dev/audio/pcm0, and works correctly as such with nx_player.
The conversions are wav (or mp3 etc) to pcm. Don’t if we’re talking cross purposes or the classd driver works in a way it shouldn’t!!! > On 27 Aug 2023, at 23:00, Gregory Nutt <spudan...@gmail.com> wrote: > > Also, I don't think the /dev/audio/pcm0 device you are talking about is what > you think it is. It is a character driver but not the Class D lower half. > So, yes it can be opened. > > /Caveat: It has been ages since I worked with the audio subsystem so I might > be completely wrong./ > > /dev/audio/pcm0 is the audio subsystem interface device. The "pcm" > indicates that it used the PCM software decoder (that will convert PCM file > data to WAV). It gets set up like: > > boards/arm/sama5/sama5d4-ek/src/sam_wm8904.c: > > pcm = pcm_decode_initialize(wm8904); > snprintf(devname, 12, "pcm%d", minor); > ret = audio_register(devname, pcm); > > And a character driver is registered by the audio subsystem in audio/audio.c: > > int audio_register(FAR const char *name, FAR struct > audio_lowerhalf_s *dev) > { > ... > > audinfo("Registering %s\n", path); > return register_driver(path, &g_audioops, 0666, upper); > } > > Where g_audioops is the character driver operations structure: > > static const struct file_operations g_audioops = > { > audio_open, /* open */ > audio_close, /* close */ > audio_read, /* read */ > audio_write, /* write */ > NULL, /* seek */ > audio_ioctl, /* ioctl */ > }; > > So the registered pcm0 is the standard audio buffer chain configured for PCM > file to WAV conversion and terminating with a wm8904 DAC. > > I don't believe that there is any way to get the Class D audio_ops_s as a > driver under /dev. Nothing like that is supported. >