小鱼塘--自说自话的地方

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. nes
  3. 正文

nes apu 这段时间的一些理解

6 4 月, 2026 2点热度 0人点赞 0条评论
内容目录

定时器

这里面定时器通过芯片的时钟的频率进行分频得到对应的定时器

cpu 频率 = 1.79mhz 1.7897725 1.7897725 * 1000000 = 1,789,772.5
apu 频率 = 1.79 mhz / 2 = 1790hz / 2= 895hz 1789772.5 / 2 = 894,886.25 apu的频率

这样子一秒 894886 震动,根据文档可以的出来 每一帧是 1/4 是 3728 * 4 = 14912

894886 / 14912 = 60hz ,所以apu 一帧的时间是60hz ,这个跟nstc ppu的频率是一样的

1/4 = 60hz × 4 = 240 hz 1/2 = 60×2 = 120hz , 所以推进frame 有2个定时器,所以资料图上才会特别标明Quarter frame 和 Half frame ,所以感觉这个frame 跟 ppu 刷新频率有点关联。

frame

本质就定时器,用来触发Envelopes 和 Triangle linear counter(控制播放声音变化,240hz 定时器来处理1/240 = 0.00416666 秒触发一次,如果模拟时候我们电脑的定时器可以稳定话也是可以用,但我测试时候达不到稳定,因为会有波动,同时代码也会消耗时间进行干扰),同时还有length counter 和 sweep 播放时间和频率触发(120hz)

我第一次看这个资料不知道它们说些什么,后面模拟写了方波理解了一点,后面又写三角波的感觉好很多了,这块代码可以抽离出来,然后组合给这几个波,代码就好看很多

总结

  1. 通过分频器得到对应定时器来改变波形和频率,用来模拟对应波的变化,然后输出
  2. 资料非常重要,开源代码辅助看一下,可能要看现代一点的代码,太老的代码为了性能,导致代码可读性比较差,或者一些知识点不知道,导致看不懂代码
  3. 播放声音会流畅需要先播放一段静音数据,先要代码跑起来,这样子就有足够时间生成数据给声卡播放了,但延迟不要太长,不然就会明显延迟感觉了,开始不知道这点,我调整各种参数,因为是自己波形模拟有问题,我自己录制时候发现可以正常播放,但跑代码就有问题,后面无意间分析开源代码找到了,然后一测试果然是这个问题,貌似好多文章都没有写这个点,都在介绍怎么模拟波形的变化
  4. 一些老的开源代码用directsound 等播放声音和 显示界面,那些老代码,导致directx版本太低,必须用新版本,对于我这种没有写过,直接通过AI 重新,直接把报错改写掉就可以了
  5. 声音模拟感觉比ppu模拟麻烦很多,因为PPU 一点区别是看不出来,声音模拟就不一样了,同时多个点改变声音,如果一处代码不对就会导致声音播放不对,可能出现卡或者欠载出现

简单记录下来,方便以后查看,东西实现了发现没有难,但没有实现前,各种问题觉得好麻烦。

标签: 记录
最后更新:6 4 月, 2026

小鱼儿

爱研究技术,爱玩LOL

点赞
< 上一篇

COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

湘ICP备18005349号