在引导程序中播放声音的最佳方法



我当前正在尝试找出一种循环声音(当前以mp3/wav格式存在)的方法,但我不知道从哪里开始。

因此,我有3个问题:

  1. 当处理器处于16位模式或32位模式时,播放声音更容易?
  2. 哪种声音的格式将是最好的?
  3. 是否有可用的公共可用库?我没有发现任何有用的东西。(也许我是盲人?idk)

预先感谢^^

当处理器处于16位模式或32位模式时,播放声音更容易?

它几乎没有什么不同,主要取决于您要定位的声卡 - 现代声卡将要求您能够在第一个4GIB中的任何地方寻址。
将CPU置于虚幻模式将是最好的 - 它很容易,使您可以访问4GIB地址空间,并让您使用BIOS服务。

哪种形式的声音将是最好的?

您可以查看Wikipedia上的MP3页面,以查看即使进入技术细节之前,MP3解码都是一个非常漫长的话题。
它假定了傅立叶系列的知识,因此您必须精通复杂的分析(从涉及复杂数字的意义上 - 理论本身是基本工具)和信号处理。
如果您从未听说过"采样","窗口函数","量化",那么是时候阅读少量的本科书了。
当然,您必须精通处理二进制数据,字段的图片或表格应该足以写下代码。
必须将MP3解码为一系列样本。
我想在硬件中解码的一些卡支持(我从未真正检查过)。

WAV文件格式要容易得多 - 以至于大多数文件具有相同的固定标头(或者您只能支持)。
基本上,它几乎是直接播放的 - 如果您按以下采样率,每个通道等等,并仅使用最小的块生成WAV文件,您甚至可以找到特定的偏移量并直接将数据直接流式传输到卡。<<<<<<<<<<<<<<<<<<
如果未使用压缩,则WAV格式已经是样品的序列。

是否有可用的公共可用库?我没有发现任何有用的东西。

当然不是,为什么会有?
一些开源项目可以解码mp3肯定存在,为您指出它们并不是那么责任,但是当然没有针对X86启动环境的目标。
您需要移植它 - 它可能并不小。
从寻找支持实际模式的编译器开始,以实现所需的最小CRT结束。


您还需要精通以下内容:

  • irq
  • DMA
  • PCI/PCI-E
  • io和mmio
  • 从磁盘阅读

现在您知道了所需的泰坦尼克号,这里有一些建议:

  • 您是否考虑过旧扬声器?
    您只能像游戏男孩一样产生方波(它是打开或关闭的1位"音频卡")。
    热身可能是好的,因为它仍然需要定时您的代码。
  • 您可以相对容易地编程SB16。
    SB16很旧,所以现代卡片更简单。
    Dosbox可以模仿它。
    我曾经写过一个关于如何在DOS下使用此卡的WAV文件的答案。
    您只需要移植它即可。
  • 如果您想使用现代卡查找系统中存在的卡。
    可能有两个其芯片组的英特尔数据表始终记录Intel Integrated HD Audio PCI设备。
    其他卡可能具有专有的数据表 - 发现它们是工作的90%。
  • 在VM内进行测试
    这将使您摆脱无数的重启。

我不是想让您恐惧,播放声音或在汇编中的一般多媒体内容中是奇妙的,您不应该停止,而是要当心,这是一项非微不足道的工作,它假设熟练掌握了汇编。

如果您正在寻找一种快速而污垢的解决方案,那么最好停止。
由您判断自己并决定最佳行动方案。

相关内容

最新更新