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