PC扬声器到十一

PC扬声器现在被称为“主板扬声器”或“蜂鸣器”,与第一台个人IBM计算机一起于1981年推出。 作为用于严肃业务的大型严肃计算机的继任者,它被设计为可以产生非常基本的哔哔声,因此在新兴的家庭市场的众多娱乐节目中,它从来没有真正有机会像音乐设备那样闪耀。 它被流行的家用游戏系统的更先进的声音芯片所掩盖,并很快被功能强大的声卡所取代,它主要用作后备选项,播放的是更好声音硬件的降级内容。

“系统哔哔”是一种MS-DOS程序形式的音乐专辑,其特征是使用与经典PC游戏中相同的基本旧技术,为PC Speaker创作原始音乐。 它遵循通常的复古计算恶魔公式-采取生锈和过时的方法,将其推到11位-并试图揭示这种不起眼的小声音设备的长期隐藏潜力。 您可以在操作中听到它的声音,并在Bandcamp或下面的视频中对这种尝试的成功程度发表看法。 对于想要了解更多信息的人,下面的文章是对PC Speaker原始功能和项目构成的深入概述。


PC扬声器内部


PC扬声器是一种小型的磁性扬声器,或者是最近一种压电蜂鸣器,由8253可编程间隔计时器的通道直接驱动,该通道将1.19 MHz的输入时钟频率除以编程的16位值。 为了产生声音,将计时器设置为方波发生器模式。 与当代低成本家用计算机(如Apple IIZX Spectrum)相比,这是一个小巧但方便的改进,在Apple IIZX Spectrum中 ,扬声器直接连接到I / O线,并且声音全部由CPU产生。 使用PIT可使CPU设置频率,并在计时器发出声音时继续处理其他任务。 但是,CPU可以产生更多有趣的多音色和弦声音,而PC扬声器本身在没有CPU重大帮助的情况下无法发出大声或安静,柔和或尖锐的声音-仅限于没有音量控制的普通方波。

为了播放声音效果或音乐,CPU在均匀分布的时间段内更新计时器的状态,即声音的开/关及其音调。 通常,这是在同一PIT芯片驱动的定时器通道0(IRQ0)的中断处理程序中完成的。 默认的中断频率是18.2 Hz,但是游戏通常会将此中断频率提高到30 ... 200 Hz,具体取决于游戏。 这有助于稍微改善声音的复杂性。

PC扬声器可以有效播放100 ... 2000 Hz范围内的音调。 它可以降得更高或更低,但这带来了一些问题。 小型扬声器和压电扬声器无法很好地再现其他频率。 高于2000 Hz时,由于计时器的分辨率,它也开始偏离音符频率很多。 低于100 Hz时,声音频率可能会低于更新周期,从而导致丢失一些声音更新,因为一旦使用前一个分频器完成当前计数,计时器便会更新分频器。

单音复音


PC扬声器是单声道设备-它只有一个声音通道或“声音”,即一次只能播放一个声音频率。 这在音乐目的上是非常有限的,因此游戏开发人员和音乐作曲家正在研究实现真假复音的一些方法。 随着时间的流逝,已经开发并使用了三种常见的方法。

第一种方法认为PC Speaker像往常一样播放方波,播放器代码以设定的速率更新计时器中断中的音调,从而几乎不给CPU造成负担。 但是,有2-3个虚拟的声音通道,其中播放着不同的声部,其中只有一个在给定的时刻输出到实际的扬声器,并且每次更新时交替出现。 例如,有两个通道。 在一个更新中,第一个被定向到扬声器(分频器和扬声器的开/关状态发送到声音寄存器),在另一个更新中,第二个被定向到扬声器。 这就是在Lotus IIIXenon 2中实现某种复音的方式。 此处一种很常见的情况是,一个声道弹奏低音,而另一声道弹奏旋律,而这些部分之间的频率相距甚远,从而导致音高大幅度跳动,或者一个声道弹奏音符,而另一个声道被静音,这两种情况都导致令人不快的持续嗡嗡声。 可以通过完全忽略音乐中的任何静音音符来减少它,就像Golden Axe一样,这在很大程度上限制了音乐表达的方式(暂停与音乐中的音符一样重要)。 另一种方法是在可能的情况下避免交替使用通道,例如只有一个通道在演奏音符时。 就像特技中听到的那样,这有助于使这些零件更清晰。

在许多卢卡斯艺术游戏中都可以看到第二种方法。 该公司通常会付出额外的努力,以使音乐的扬声器版本听起来更好。 这些通常演奏主要是单声道的旋律,其旋律,低音和节奏部分都在时间上分开。 第二通道演奏非常短的断音音符,例如琶音或鼓,它们具有优先权,短暂地使主通道静音。 可以在印第安纳琼斯的 织机的 猴岛上找到例子。 Zak McKracken和Alien Mindbenders听说过此技术的最先进用法之一。 尽管功能相当有限,但这会使声音更加逼真和令人愉悦。

在第三种方法中, PC Speaker硬件不是用来单独产生声音的,而是用作原始DAC的,它仅以软件方式输出由CPU产生的声音。 这占用大量CPU时间,几乎使8086的负载最大化,因此仅在80386到来时才流行。此方法的音质相当差,客观上不如由少数电阻器制成的最简单的Covox复制品。 然而,这在当时确实是一个令人印象深刻的成就,因为其实现之一RealSound已获得了专利和再许可。

可以通过禁用计时器计数然后启用/禁用声音输出来使PC Speaker进入DAC,这使其成为非常基本的1位DAC,或者通过使用PIT的声音通道在以下位置生成可变宽度(PWM)的短脉冲:计时器中断设置的载波频率,可以有效地提供更好的6位DAC。前者可以在Fantasy World DizzyHard Drivin'中听到,后者通常用于播放数字化基于样本的音乐,例如Pinball梦想 。 它过去也曾用于TEMUVSB等迷人的工具中,它们是3通道Tandy声音芯片的软件仿真器和Sound Blaster的数字部分,允许通过PC Speaker在支持命名设备的程序中播放声音,而无需设备本身(需要386SX或更高)。

专辑及其制作方式


最初我无意制作音乐专辑。 我正在设计一个游戏项目,该项目将被设计为XT时代的伪图形游戏。 为了实现这一构想,我想出了一个想法,不仅要进行风格设计,还要进行实际的PC Speaker音乐,这些音乐也要遵循常见的8位时代游戏公式-大约一分钟长的循环轨道。 我不想使用数字样本或软件合成,因为考虑到美学的考虑,它们并不合适,并且本身没有独特的特征。 自从我在ZX Spectrum上第一次在乒乓球星尘得分3020等游戏中听到单音音乐以来,我就感到了特别的吸引力。 有了这样的机会,我渴望尝试制作一种真正的单声道音乐,并尝试通过编排的方式挤出一些以前闻所未闻的结果,这对我作为音乐作曲家来说是一个有吸引力的挑战。

音乐方面的工作使我震惊,并且比游戏项目本身更感兴趣。 一炮打响 ,我开发并发布了VSTi插件PCSPE ,制作了许多音乐素描和一些旧作品的封面版本,以开发适用于单声道安排的作曲技术,并塑造了一般的声音设计。 最终,我认为结果不适合那个当时对我失去吸引力并被搁置的游戏项目。 但是,我做了一些音乐,并觉得它确实具有发行潜力,我认为做一个快速的产品并将其作为独立的MS-DOS音乐盘发布给公众会很好,用作PCSPE功能的演示。

事实证明,快速生产不是那么快。 几首歌变成了几十首歌,随机歌曲的收集演变成概念化的专辑,计划已经改变,截止日期被推迟。 从2017年7月到2019年1月7日,这个项目最终用了将近1.5年的时间。在此期间,我还设法开发了AONDEMO为其创作了一首歌(AON声音硬件与PC扬声器非常匹配。 ),并以声音代码和工具开发人员的身份参与Planet X3游戏项目。 最终,该游戏还使用了我为专辑创作的第一首歌曲作为名义歌曲。

完成项目的时间延迟很多,越来越多的歌曲,直到我用尽了在项目中完成的所有原始想法和草稿。 最终曲目列表包括分为三组的23首歌曲。

A面包含16首主要歌曲,或多或少与主题和声音设计相关。 其中大多数都是从零开始为这张专辑制作的,或者是基于未使用的旧材料,非常适合单音排列。 与其他歌曲相比,在该类别中,我选择了最新颖的歌曲,并在选定的限制内感觉最成功。

B面包含6首B面质量的歌曲。 其中大多数是我在其他平台上使用的较早作品的翻版,或者是基于更未开发的未使用积压材料,最初是针对非常不同的媒体(从XM跟踪器模块到流行的朋克歌曲)。 此面还包括在Planet X3游戏中使用过的歌曲。

Side X包含一个奖金轨道,该轨道是从AONDEMO改编而来,变化很小。 由于幽默,它与其余部分分开了。

专辑本身已作为适用于MS-DOS 3.3或更高版本的程序呈现,它将在具有至少256K RAM和CGA视频卡的经典IBM PC XT上运行。 原始的CGA受到所谓的“雪”(snow)的影响,这是在光栅扫描过程中每当程序向视频存储器写入数据时就会出现的视觉伪影。 因此,专辑程序有两种风格-减少sbx.com,没有下雪,但没有频谱分析仪效果;功能齐全的sb.com,具有完整的视觉效果。 建议使用更快的CPU,以使视觉效果更流畅。 您也可以使用带有从USB棒加载的FreeDOSDosBox仿真的现代PC。

音乐方面


专辑没有使用任何高级技巧,例如软件声音合成或样本播放。 它使用最传统的技术-PIT通道生成的经典单声道方波。 声音更新速率为120 Hz,比平时高一点,但没有极端。 Classic XT完全可以完成任务,除了播放音乐外,还剩下足够的CPU时间来执行其他任务。

真正的窍门是采用一种特殊的音乐创作和编曲方法。 过去在相关知识领域的经验提供了极大的帮助-为经典声音芯片制作音乐的经验,这些经验通常需要通过交织和叠加元素将几个部分放到单个通道中; 为旧游戏系统开发游戏声音引擎的经验,其中声音效果通常必须从音乐中窃取声音通道; 还具有编写要在软盘驱动器上播放的原始音乐的经验。 事实证明,我实际上是在开发Lucas Art所使用的方法,尽管我并不了解它,并且当时只听到了Monkey Island的主题。

鼓和打击乐器是需要立即解决的一个有趣的问题。 在传统的Chiptune中,它们通常是通过混合音调和白噪声来完成的。 但是, PC扬声器无法在保持声音更新速率在12至100 Hz范围内的同时产生白噪声。

鼓和鼓在没有任何噪音的情况下工作得很好,就像音调以不同的速度和持续时间向下滑动一样-踢是从低音开始快速滑下,鼓是从高音开始缓慢而长下滑。 然而,最重要的军鼓无法像简单的音调滑轨那样运作良好,听起来很奇怪,并且无法消除与其他元素忙碌的混音。 在SIDAY-3-8910 Chiptune中常见的技巧在这里效果很好-向下滑动开始后立即插入一小段沉默,这会产生短暂的弹鼓声。 这使小军鼓声音与其他打击乐器声音完全不同,并提高了小鼓在混音中的可听性。 考虑到真正的PC Speaker确实会产生强烈的共鸣,它的效果特别好。

由于无法产生白噪声,因此踩hi是行不通的。 为了使打击乐器的声音更有趣,在歌曲之间鼓声会有所不同。 有些音轨鼓较长,有些音短而有力,有时音高或低音低,在某些地方会产生额外的打击乐器。

在处理音乐时,已经开发了许多通用技术。 它可以应用于书写装置,给人一种在没有音量控制的情况下对任何单音设备都具有复音的印象-从音乐明信片到CNC机器再到Tesla线圈。 各种技巧包括:

  • 当大概更大声的声音(如踢鼓或军鼓或主要旋律中的音符)使所有其他部分静音时,听力会被欺骗,但大脑不会过多注意短暂缺少其他声音元素。
  • 通常,声音之间的停顿要足够多,尤其是在前奏部分。 这样可以使分开的实体更好地被听到,因此,一旦安排变得更加紧张,即使几乎听不到这些元素,大脑仍会认为这些元素在那里。
  • 弹奏略微偏离节奏的音符,或将其大部分音符置于弱节奏或非节奏音色上的旋律,因为这些地方往往会有间隙,因此旋律音符不会干扰低音或其他声音。 这使旋律和伴奏高度融合,为音乐增添了一些特别的时髦感觉。
  • 常见的Chiptune琶音器以不同的速度进行演奏,包括快速播放120 Hz的琶音。 考虑到主要缺乏音色变化,大范围的琶音速度对增加声音的多样性非常有用,因为所有东西都在播放纯方波。
  • 连续声音的间隙允许其他部分通过,或一系列持续时间增加的间隙,以模仿音量衰减。
  • 音符持续时间的主要变化,包括使用极短的音符来模仿音量差异。 已被用来强调低音凹槽和回声效果。 通过延迟和重复较短的音符重复相同的部分来完成回音。




技术方面


生产中的另一个关键要素是使用现代工具,该工具使工作流程更加高效和简化。 这些工具包括现代的DAW Reaper (可替代FL StudioCubase等),以及一组定制开发的VST插件。



这种方法是实验性的,在制作“真正的芯片音调”时非常不常规-也就是说,打算使用过去的实际声音设备播放音乐。 通常,制作此类音乐涉及使用称为音乐跟踪器的特殊软件,或进行手动准备并将音乐数据的字节输入源代码。 当然,也可以通过这些经典方式(与我对Planet X3所做的一样)实现相同的结果,但是这将花费更多的精力并将重点从音乐创作转移到克服技术问题的过程中。

为了制作PC Speaker音乐,我创建了一个称为PCSPEVSTi插件。 它模拟PC扬声器的内部结构,允许听到其所有怪异和局限性的逼真的声音,并实现了Chiptune乐器系统,类似于用于各种声音芯片的音乐跟踪器。 它具有虚拟音量(优先级),琶音和音调的包络,这些包络是通过类似于MML的简单格式的文本字符串定义的(与BASICPLAY运算符中的文本字符串非常接近)。 这些包络允许设计不同的乐器,例如鼓声或具有缓慢增加的颤音深度的独奏乐器。

但是,该插件的主要职责是将一些包含各个乐曲部分的传入MIDI轨道混入单个最终轨道中。 我上面提到的虚拟卷用作优先级系统的基础。 在给定时刻,只有一台具有最高当前虚拟音量的乐器会演奏。 例如,贝斯乐器的音量为2,主旋律的音量为6,所有鼓乐器的音量为8。在这种情况下,旋律音符将优先于贝司音符,在演奏旋律时将贝司部分静音,并且所有鼓将全部静音。其他声音。 这就是一些同时演奏音乐的部分混入PC Speaker的单声道的方式。

该插件还具有导出功能,允许在实际的MS-DOS程序中使用音乐。 它就像一个简单的数据记录器一样工作:该插件具有有关在给定时刻输出到扬声器的频率以及频率变化时间的信息。 在启用导出功能的情况下从头到尾播放歌曲时,这些数据将被捕获并实时写入文件中。 现在,要重播音乐,只需从文件中选取数据,然后使用记录的时序将其发送到实际的PC Speaker

可以在PCSPE中以经典方式创建经典的Chiptune琶音,方法是使用琶音包络定义从基本音符开始的半音偏音序列。 但是,这将需要经常在乐器之间切换,并牢记需要为特定和弦使用哪种乐器。 这在现代DAW中使用起来并不方便。

我的另一个VSTi是称为ChipArp的琶音器,它以一种更简单的方式帮助制作了经典的Chiptune琶音。 它从输入的MIDI轨道中提取普通的和弦,并将其实时转换为所需配置的琶音(全部,全部,向下,上下,以所需的BPM)–您可以使用MIDI键盘弹奏和弦并聆听立即进行适当的琶音。 与设计用于电子音乐的现代琶音器不同,我的插件不会为每个琶音步骤重新启动音符,而是将其实现为从基调开始的一系列快速音高弯曲。 这样,它不会破坏具有连续声音流的乐器,并且您仍然可以听到他们在琶音时随时间的变化。 这里要注意的是,合成器插件需要支持大弯音并立即对其做出反应,这对于现代合成器而言并不常见。 但是,我的synth VST的所有功能都对此提供了支持。

几乎所有的仿真器,包括PCSPEDosBox之类的东西 ,都产生方波的理想化版本,这听起来与实际硬件完全不同。 仅用于发出基本蜂鸣声的微小小扬声器会产生强烈的共鸣和失真。 这将重点放在瞬变上,即打开或关闭声音的时刻或频率的快速变化。 除其他外,这使鼓和短音在实际的PC Speaker上听起来更加震撼。 为了更好地控制和应用此怪癖,我记录了一些小型扬声器的冲激响应,并与一个名为NadIR的免费卷积器插件一起使用 -就像这些天在录制沉重吉他时使用吉他柜的冲激响应一样。

货品


该项目已根据CC-BY许可证发布。 这包括音乐本身,播放器源代码以及所有歌曲的Reaper项目。 这样,您可以执行任何衍生项目,无论是音乐还是代码相关的项目。 所有用于创建相册的插件也随源代码一起免费提供:

MS-DOS专辑播放器
源代码和收割者项目
带源代码的PCSPE
Chipart源代码
微小的说话人冲动反应

Source: https://habr.com/ru/post/zh-CN439192/


All Articles