ITADN
shorepine/tulipcc
shorepine/tulipcc · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

郁金香创意计算机与 AMYboard - 用于音乐、图形、代码和写作的便携式可编程设备

Tulip AMYboard

欢迎使用郁金香创意计算机(Tulip CC)和 AMYboard!

Tulip 是一款低功耗、价格实惠的自包含便携式计算机,配备触摸屏显示和声音。它完全可编程——你编写代码来定义你的音乐、游戏或你能想到的任何其他东西。它瞬间启动进入 Python 提示符,内置大量对音乐合成、快速图形和文本、硬件 MIDI、网络访问和外部传感器的支持。无需分心或复杂操作,直接开始创作。

整个系统专用于你的代码、显示和声音,在专用硬件上实时运行。硬件和软件完全开源,任何人都可以 购买一台自行组装一台。你可以使用 Tulip 制作音乐、编程、艺术、游戏,或者只是写作。

AMYboard 是 Tulip 的无头(无屏幕)版本,具有更多的音频功能——音频输入、模块化 10hp 和 10vpp 音频、S/PDIF 数字音频、CV 插孔、SD 卡。它基于 Tulip 代码,但专注于音乐合成。

你现在甚至可以 在网络上运行 Tulip在网络上运行 AMYboard,并与任何人分享你的创作!

Tulip 和 AMYboard 由 MicroPythonAMYLVGL 提供支持。Tulip 硬件运行在 ESP32-S3 芯片上,使用 ESP-IDF

shore pine sound systems discord 在我们的 Discord 上讨论 Tulip!

查看这个视频!

Tulip, a musical computer based on Micropython

你可以使用 Tulip 的三种方式之一:

如果你担心获取或构建硬件,在网页上试试吧!

Tulip Web

硬件 Tulip CC 支持:

  • 8.5MB 的 RAM - 2MB 可供 MicroPython 使用,1.5MB 可供操作系统内存使用。其余部分用于图形帧缓冲区(可用作存储)和固件缓存。

  • 32MB 闪存存储,作为可在 Python 中访问的文件系统(ROM 中的操作系统占用后剩余 24MB)

  • 一个本地运行的 AMY 立体声 120 通道合成器引擎,或作为 Alles 网格的无线控制器。Tulip 的合成器支持加法和减法振荡器、出色的 FM 合成引擎、采样器、Karplus-Strong、高质量模拟风格滤波器、音序器以及更多功能。我们随 Tulip 附带了鼓机、音色/补丁应用和 Juno-6 编辑器。

  • 文本帧缓冲区层,128 x 50,支持 256 色的 ANSI 支持,包括反色、粗体、下划线和背景色

  • 屏幕上最多 32 个精灵,按扫描线绘制,具有碰撞检测功能,来自总共 32KB 的位图内存(每像素 1 字节)

  • 一个 1024(+128 过扫描)x 600(+100 过扫描)的背景帧缓冲区,用于绘制任意位图或用作 RAM,并且可以水平/垂直滚动

  • WiFi,通过 Python requests 或 TCP / UDP 套接字访问 http

  • 可调节的显示时钟和分辨率,默认为 1024x600 下的 30 FPS。

  • 256 种颜色

  • 可以从磁盘加载 PNG 以设置精灵或背景,或从代码生成位图数据

  • 内置代码和文本编辑器

  • 内置名为 TULIP ~ WORLD 的 BBS 聊天室和文件传输区域

  • 支持 USB 键盘、MIDI 和鼠标,包括集线器

  • 支持电容式多点触控(适用于 Tulip Desktop 和 Tulip Web 的鼠标)

  • MIDI 输入和输出

  • I2C / Grove / Mabee 连接器,兼容许多 I2C 设备,如摇杆、键盘、GPIO、DAC、ADC、集线器

  • 5V 下功耗为 575mA(含显示屏),在中等屏幕亮度下,使用 LiPo、18650 或 USB 电池组可续航数小时

多年来,我断断续续地在许多硬件迭代上开发 Tulip,希望有人能像我一样享受它,无论是用 Tulip 制作东西,还是参与 Tulip 本身的开发。我非常期待收到反馈、你们自己的 Tulip 实验或用于改进系统的 pull requests。

Tulip

T-Deck Tulip CC

T-Deck

A new small option: get yourself a T-Deck and install Tulip CC on it directly! Check out our T-Deck page for more detail.

快速入门

一旦你购买了 Tulip打开了 Tulip Web构建了 Tulip安装了 Tulip Desktop,你会发现 Tulip 直接启动进入 Python 提示符,所有与系统的交互都在那里进行。你可以使用 Tulip 内置的编辑器编写自己的 Python 程序并执行它们,或者直接在 Tulip REPL 提示符上实时进行实验。

查看完整的 Tulip API 以获取更多关于所有图形、声音和输入函数的详细信息。

以下是一些入门提示和小示例。完整 API 页面提供了有关在 Tulip 上可执行的所有操作的更多详细信息。查看更完整的入门页面音乐制作教程

# Run a saved Python file. Control-C stops it
cd('ex') # The ex folder has a few examples and graphics in it
execfile("parallax.py")
# If you want to run a Tulip package (folder with other files in it)
run("game")

Tulip 编辑器

Tulip 附带一个基于 pico/nano 的文本编辑器。它支持语法高亮、搜索、保存/另存为。

# Opens the Tulip editor to the given filename. 
edit("game.py")

Editor

输入与用户界面

Tulip 支持 USB 键盘和鼠标输入以及触摸输入。(在 Tulip Desktop 和 Web 上,鼠标点击作为触摸点。)它还提供了按钮和滑块等 UI 元素供您在应用程序中使用,以及一种使用回调同时运行多个应用程序的方式。更多详情请参阅 完整 API

(x0, y0, x1, y1, x2, y2) = tulip.touch()

UI demo

网络

Tulip CC 具备连接 Wi-Fi 网络的能力,Python 原生的 requests 库可用于访问 TCP 和 UDP。我们还提供了一些便捷函数,用于从 URL 获取数据。更多详情请参阅 完整 API

# Join a wifi network (not needed on Tulip Desktop or Web)
tulip.wifi("ssid", "password")

# Get IP address or check if connected
ip_address = tulip.ip() # returns None if not connected

# Save the contents of a URL to disk (needs wifi)
bytes_read = tulip.url_save("https://url", "filename.ext")

音乐 / 声音

Tulip 内置了 AMY 合成器,这是一款功能非常齐全的 120 振荡器合成器,支持 FM、PCM、加法合成、分音合成、滤波器以及更多功能。我们还提供了一个实用的“音乐计算机”,用于处理音阶、和弦与和弦进行。更多详情请参阅 完整 API音乐教程。 Tulip 版本的 AMY 支持立体声,您可以通过 pan 参数为每个振荡器进行设置。

amy.drums() # plays a test song
amy.send(volume=4) # change volume
amy.reset() # stops all music / sounds playing

https://user-images.githubusercontent.com/76612/215893940-658144b7-0c6f-42e2-9836-bd271597aab3.mov

MIDI

Tulip 支持 MIDI 输入和输出,以便连接外部音乐硬件。您可以设置一个 Python 回调函数,以立即响应任何传入的 MIDI 消息。您还可以向 MIDI 输出发送消息。更多详情请参阅 完整 API音乐教程

m = tulip.midi_in() # returns bytes of the last MIDI message received
tulip.midi_out((144,60,127)) # sends a note on message
tulip.midi_out(bytes) # Can send bytes or list

图形系统

Tulip GPU 支持滚动背景层、硬件精灵和文本层。更多详情请参阅完整 API

# Set or get a pixel on the BG
pal_idx = tulip.bg_pixel(x,y)

# Set the contents of a PNG file on the background.
tulip.bg_png(png_filename, x, y)

tulip.bg_scroll(line, x_offset, y_offset, x_speed, y_speed)

https://user-images.githubusercontent.com/76612/215895305-7b02ad27-b02a-429a-92ef-f13136e9f9d2.mov

支持硬件精灵。它们按每帧每扫描线绘制在背景和文本层之上:

(w, h, bytes) = tulip.sprite_png("filename.png", mem_pos)

...

# Set a sprite x and y position
tulip.sprite_move(12, x, y)

https://user-images.githubusercontent.com/76612/215896311-fc0823aa-44bc-4305-85db-a6773db11a98.mov

Tulip World

目前仍处于非常早期的阶段,但 Tulip 支持一个名为 TULIP ~ WORLD 的原生聊天和文件共享 BBS,你可以在那里与其他 Tulip 用户交流。你可以拉取最新的消息和文件,也可以自己发送消息和文件。更多详情请参阅 完整 API

import world
world.post_message("hello!!") # Sends a message to Tulip World. username required. will prompt if not set
world.upload(filename) # Uploads a file to Tulip World. username required
world.ls() # lists most recent unique filenames/usernames

如何构建、编译并协助开发 Tulip

shore pine sound systems discord 在我们的 Discord 上讨论 Tulip!

如果你愿意帮助贡献,这里有两条重要的开发准则!

  • 保持友善和乐于助人,不要害怕提问!我们做这些都是为了乐趣和学习。
  • 任何更改或功能必须在 Tulip Desktop 和 Tulip CC 上保持一致。当然,这条规则有一些有限的例外,但在提出新功能/更改之前,请务必在硬件上进行测试。

玩得开心!

Tulip