Answers:
不,不可能。使用aplay
或mplayer
。
您的想法有两个问题。第一个是写入会/dev/console
导致书面字符出现在系统控制台中,该字符通常用于向用户显示错误通知(我相信),而不是用于播放声音。如果您从某种程度上获得了书写的声音,我想这是由于每个字符都有1/256的几率出现,因此会发出一声短促的哔哔声。
第二个问题是,a .wav
并不是原始的,明确的音频流,即使它不那么复杂并且(通常)没有像许多其他格式一样被压缩。实际上(iirc)永远不会有原始,明确的音频流之类的东西。您将始终(至少)需要一个标头来指定样品的分辨率和速率,以便对数据进行任何有用的处理。如果决定Linux内核的职责之一是解码各种音频格式,我将感到非常惊讶。通常,最好由用户空间中的程序来完成此操作。
Windows 9x系列(至少一部分)在内核中对图标进行了图像解码。事实证明,这是一个不太理想的主意,并引起了许多很多蓝图。
如果您想从命令行播放wav,通常有一些程序可以使用ALSA界面为您解码文件并将其传达给内核。我建议在大多数系统上都可以使用并且相当简单的aplay,或者mplayer也广泛分布,但是复杂性要大得多。如果您的系统支持声音,则可能至少安装了其中之一。
应该有可能,但您是否同意所产生的质量是另外一回事了。
首先,波形是经过脉冲编码调制(pcm)的,PC扬声器几乎是一个开或关的故事,因此有2种选择...分析波形旨在归档的频率(如果有多个波形,将很难一次),然后让扬声器重现该频率,或者说只有在WAV中的数据达到某个预设值时才可以打开或关闭它,或者只打开或关闭它音量/ pcm阈值。
而且wav的采样率将比扬声器硬件可能处理的采样率高得多(不确定这一点,但是除了“东西可以处理的电压尽可能多”或“零”而无其他设置之间,不能设置其他幅度)这是更大的问题。
现在...方法1您要研究的东西是ioctl(x,KIOCSOUND,1193180 / desired-freq-in-hz); 0明显处于关闭状态。在/ dev / console上的fd上的KDMKTONE ioctl似乎应该在指定的时间内产生指定的音调。
但是,如果您想正确执行操作,我会拿起扬声器所连接芯片的数据表,并直接解决该问题,而无需理会/ dev / console或任何Linux东西……所以您确实可以,只需打开或关闭电压即可。会产生pcm调制的声音...在“响”和“无”之间没有任何幅度变化。
也许所有方法听起来都像废话一样...但是首先分析频率然后回放一个频率对通常同时包含多个频率的音乐不起作用。
整个ioctl KIOCSOUND / KDMKTONE似乎都依赖于内核中的clocktick设置,以及是否存在/ dev / console和文件描述符(也称为打开文件)。他们似乎并没有“仅仅解决蜂鸣器所连接芯片的I / O引脚”。
可编程中断计时器(PIT)英特尔8259输入/输出端口$ 0042读/写PIT计数器2,卡带和扬声器(XT,AT,PS / 2)
基本上,通常的方法是将其编程为所需的频率,然后会发出蜂鸣声,但是您想要的只是“开”或“关”,因此基本上是0hz或非常低的hz,然后当来自wav从'1'变为0以再次将其关闭...依此类推。处理wav文件的采样率取决于其他软件。(如果平均值太高,则取平均值或跳过样本-无论如何它都是模拟的,您只能产生数字输出;)