
![]() 描述 具有悠久历史的声音玩具(更多,一些不太严重的)和受极端demoscene的限制,去年我终于开始回到底层编码和探索 ARM / STM32 平台的可能性。连同我的正在进行的研究和其他stack-oriented语言,我很快到达的想法来创建一个可编程(最终活codeable)合成器环境对于这些廉价,嵌入式ARM设备。: m, W3 e) _3 G6 M! n l$ f# y( I * ^* Q% |) p% `- S { 宏伟计划不是建立一个经典VSTi类型synth UI,但音频引擎&像DSL来定义DSP栈和选择性地生成触摸屏GUI元素(如图片所示)甚至GPIO /传感器对各种参数的映射。DSL还允许集成传感器更好地利用平台提供了外围的可能性…… 0 q1 [3 P6 {3 e2 T- i7 @ ?3 R 到目前为止,synth架构是接近完成,已经重写几次。DSL实现仍处于早期阶段 组件: Y/ t, S* s6 A: d- V( ^ L# A 1×STM32F401-DISCOVERY7 V+ C3 j$ R7 s Devboard用于早期的原型* E* m, _" g* S 1×STM32F746-DISCOVERY- ~" ? A) o2 `! x + Q# H* J n) n- b l* S6 p2 a | ![]() 原始synth代码& 8月workshop: v6 C7 J0 ?: z1 U6 C ~. w- y7 L6 ~ 8 @/ y) C. \4 c# q8 k9 F$ [ 作为临时解决方案&因为工作的方式在最近几个月,造成这个项目的发展慢下来(不停止!),我决定把一些早期的和更稳定的版本先放出来" l+ h- N7 q4 N1 V% f 请见这里: B, d% @ A& U2 d; d2 g$ d 4 l: R- e2 K: x6 Z6 w 现在这个回购包括基于迭代的节点图,但功能更丰富的synth引擎(包括8例)和早期版本的VM & REPL。注意尽管这回购只包含便携式synth代码和没有STM32细节。相反,为更多的人使实验更容易,所有演示使用Portaudio允许运行OSX / Linux (Windows主要,但未测试)。9 d3 J+ \! _# h2 W3 A , L2 i, w1 T P* l4 D% R + c/ [+ {* C8 c( O) Z. v 下次我将运行的另一个迭代STM32 synth车间,这可能会产生更多的更新在这方面…… ; k8 c: x0 f: m& s# _3 j6 J: Z 正确的项目名称和100%的例子, E+ H( f7 Y5 P; H9 r3 c - C# l+ W; T4 R% f# K. l 由于所有最近修订的这个项目已经围绕Forth-style堆栈VM的概念定义音频操作和产生的synth的声音,我决定最后项目名称:Synstack。$ c8 T" V3 U+ r8 s( ^6 M2 p; w , i1 J) ^) y$ i, {' Z( e% U* L / S! c# u0 X, g 堆栈VM相当功能现在也严重受经典JonesForth的线程代码实现,尽管到目前为止仍然用c语言编写更有用指导来自@phaendal很棒documentation-forth(即使它是日本)——这两个可能是最可读的实现我所知道的。到目前为止没有被考虑的目标ANS兼容性。 在24-27KB Synstack VM当前时钟。这包括一些音频相关的东西:振荡器、ADSR, IIR滤波器,监听失真,所有这些都实现为本地话。VM还包括浮点支持,基本的字符串操作,用户可定制的内联的话(例如加快var查找)。控制结构、var和一个基本的反汇编程序实现为单词。* J' f& Y; _* H: Q; f! R) Q+ m0 F+ ^ 几个不同的版本的音频结果下面的单声道synth代码可以在这里听1 R- ~8 t* {2 [* Z) y- c& @- Z' O 最后的“更新”字是反复调用音频管理器提供了下一个时间片的32个样本。到目前为止,我发现这是潜在的内存使用情况之间的甜蜜点几十个运营商(尤其是在复调)和满足皮层M-7的高速缓存线路,然而缓冲区的大小是可定制的。在这个例子中“更新”字还充当简单的概率音序器,引发新的notes每150 w女士/ 60%的几率。STM32这所有通过DMA ISR触发回调,OSX上我用Portaudio作为测试音频后端,它使用一个v。类似的方法……: V3 F C( {' O1 _2 D 9 r7 b- y7 N" g1 L6 Q1 Z ![]() 没什么超级令人兴奋的声音,但我很兴奋的可能性这打开…第一次公开发布的这个项目的目的是在4月中旬… MIDI支持& 2 x从音序器演示/ @$ s1 S3 t. D5 S3 d9 H' j 9 E- n6 W' f* e" _ 只是移植和扩展MIDI音序器演示从先前的STM32F401迭代步STM32F746和更新回购。 2 O4 X, |3 s6 Y# p" d 视频2 Z. v& y6 S' C1 j5 p- Q; _- V Korg Nanokontrol配置如下: ! E1 t) X+ h! V4 U ——第一行的按钮(“S”)作为轨道1 8步音序器' S# l0 Q, E, b' c8 V ——按钮的第二行(“M”)= >跟踪2' O# `6 Q' V, r - 2左边的滑块控制滤波器截止频率音序器跟踪1 & 2 每个过滤器- 2左边的刻度盘控制共振 ——第三拨= >延迟反馈8 S: ^4 t; n! B - 4 & 5拨= >攻击时间跟踪1 & 21 X O$ I7 R6 h ——左/右= >标记变化波形振荡器1(所有跟踪)# ]6 P7 |) J* G8 c# C* i. U + ?+ C& U3 ~# y% O5 N, c8 |# q -跟踪左/右= > '当前序列到-12年,5 0,+ 7 + 12个半音来 倒带,Stop &玩像预期的那样做(在应用程序启动时,它是在暂停模式——你需要媒体播放和激活至少一个“S”或“M”按钮) 4 u6 A, L d, l9 a# c + w7 T+ k) X! L! ~ 讲义在每个音序器跟踪随机选择从一个音阶中定义的源代码。如果你不喜欢一份报告,只需取消,然后按下“S”或“M”按钮再次得到另一个半随机注意……6 G6 t0 d& c0 i, d. ]! [* b - p: R3 d: D8 _+ \7 g) v' Z3 n+ o 伦敦研讨会6 O8 [6 F8 b4 v. ~ 8 _2 L) D2 x6 U' u% S: h# _7 z4 D - _" h# B8 R+ u 仅仅一周后教学研讨会在光州的行为艺术节,我们重复和扩展经验和例子在伦敦建立了一个从/ 2-track音序器使用Korg上的按键NanoKontrol MIDI控制器及其控制各种滤波器和振荡器参数的投篮。有一些伟大的参与者的反馈,然后专注于发展使用更通用的DSP运算符。还下令STM32F7与更快的CPU和触摸屏。7 q4 p+ c: n6 h* ~ 0 N" I5 t8 z* B8 D7 g3 D2 F 第一个workshop / STM32F746 synth的第一车间使用最新的迭代发生上周末。结果是一个新的轻量级GUI模块(很快发布作为单独的库),这也是第一次结合synth的触摸屏设置STM32F7迪斯科。原来轮询touchevents相当昂贵(CPU周期的)操作,迫使高优先级的使用计时器(每2 ms)保持DMA half-buffers充满新鲜的音频数据。我记录生活会话上车间的例子和上传: 视频 5 j& L4 O: S, |2 t( X 相关资料请见GitHub ! h' @' _' l' }; `0 T 原文请见hackaday! T$ ^- V) O J" r/ Z 9 G- G$ W. ^7 ^" ~4 ?2 S7 r8 c I+ ^ + q5 O+ |5 v3 L6 b( L) ? |
20160215-synstack.pdf
下载463.3 KB, 下载次数: 2
有点忙,有时间慢慢改