3 điểm bởi GN⁺ 2024-08-11 | 1 bình luận | Chia sẻ qua WhatsApp
  • Sonic Pi: Sử dụng Ruby như một công cụ sáng tác

  • Bối cảnh

    • Tác giả vốn học chuyên ngành âm nhạc
    • Trong quá trình làm việc như một lập trình viên web, tác giả dần say mê công việc kỹ thuật
    • Tác giả từng thử thách bản thân với nhạc điện tử vì khó có thể chơi nhiều loại nhạc cụ, nhưng đã thất bại
    • Gần đây, thông qua Sonic Pi, tác giả lại một lần nữa kết hợp âm nhạc với lập trình
  • Giới thiệu Sonic Pi

    • Sonic Pi do Sam Aaron tạo ra là một bộ tổng hợp âm thanh phần mềm được điều khiển bằng mã
    • Công cụ này sử dụng một ngôn ngữ đặc thù miền (DSL) mở rộng từ Ruby để ánh xạ các khái niệm âm nhạc và âm thanh
    • Ví dụ, dùng ký hiệu như :c4 để biểu diễn nốt nhạc và dùng bộ tạo hợp âm như chord(:d3, :maj7)
  • Mục tiêu của dự án

    • Mục tiêu là sáng tác một bản demo chỉ bằng Sonic Pi
    • Tác giả sáng tác hoàn toàn bằng mã, không dùng MIDI hay sample bên ngoài
  • Ví dụ mã cơ bản

    • Thiết lập BPM bằng use_bpm 70 và thiết lập bộ tổng hợp âm thanh bằng use_synth :pulse
    • Phát nốt nhạc và đặt khoảng thời gian bằng mã như play :c2, sleep 0.25
    • Phát một mẫu bằng play_pattern_timed [ :c3, :d3, :e3, :g3 ], 0.25
  • Tối ưu mã

    • Tác giả định nghĩa hàm để giảm phần mã lặp lại
    • Tạo mẫu arpeggio bằng hàm def arpeggiate(root, is_minor = false)
    • Dùng khối in_thread do để chạy mã song song
  • Thực thi song song

    • Có thể dùng khối in_thread do để chạy song song hai "nhạc cụ"
    • Ví dụ, chạy arpeggio trong một luồng và giai điệu trong luồng khác
  • Triển khai hợp xướng

    • Dùng ring để kết hợp nhiều nốt thành một danh sách
    • Phát nốt và thiết lập thời lượng duy trì như play_pattern_timed [ring(:c5, :e5)], 4, sustain: 3.8
    • Định nghĩa hàm def choral_rings(notes, sus) để đơn giản hóa mẫu hợp xướng
  • Live loop

    • Dùng live_loop để tạo vòng lặp lặp lại vô hạn
    • Định nghĩa vòng lặp như live_loop :harp do rồi viết mã bên trong
  • Kết luận

    • Lập trình không chỉ là khoa học đơn thuần mà còn là nghệ thuật
    • Viết mã là một hành động sáng tạo và là một cách để giao tiếp với người khác
    • Với Sonic Pi, có thể kết hợp âm nhạc và lập trình để tạo ra những tác phẩm sáng tạo

Tóm tắt của GN⁺

  • Sonic Pi là công cụ cho phép sáng tác nhạc bằng mã, sử dụng một DSL mở rộng từ Ruby
  • Dự án này đặt mục tiêu sáng tác một bản demo chỉ bằng Sonic Pi
  • Lập trình không chỉ có khía cạnh khoa học mà còn có mặt nghệ thuật, và Sonic Pi thể hiện điều đó rất rõ
  • Đây là một ví dụ hay về việc kết hợp âm nhạc và lập trình để tạo ra công việc sáng tạo
  • Những công cụ có tính năng tương tự gồm TidalCycles và SuperCollider

1 bình luận

 
GN⁺ 2024-08-11
Ý kiến Hacker News
  • Nếu quan tâm đến live coding thì rất đáng thử Glicol
  • TidalCycles cũng đáng để đề xuất. Khen ngợi khả năng tạo DSL của Haskell và Ruby
  • Thiết kế ngôn ngữ của Glicol tập trung vào cú pháp lấy cảm hứng từ synthesizer, tốc độ soạn nhạc và sự tiện lợi trong thiết kế âm thanh
    • Mục tiêu là thiết kế một DSL phản ánh thói quen lập trình hiện có nhưng không bị ràng buộc bởi các ngôn ngữ hiện có
  • Ruby rất hữu ích vì cú pháp gần như giống tiếng Anh
  • Đã từng xem buổi biểu diễn trực tiếp của Sam Aaron, người tạo ra Sonic Pi
    • Rất ấn tượng với cách âm nhạc tiến hóa mỗi khi mã được thay đổi
  • Với tư cách là một lập trình viên Ruby, điều này rất thú vị vì có vẻ có thể dùng nó để tạo nhạc sinh bằng thuật toán
    • Ví dụ, có vẻ có thể dùng nó để biến các sự kiện ồn ào trong git repository thành nhạc thuật toán
  • Với tư cách là một nhạc công, ghi âm và loop bằng bàn phím MIDI hoặc nhạc cụ acoustic có UX tốt hơn
    • Có thể nhập bất cứ thứ gì bằng Ruby DSL, nhưng so với bàn phím piano thì UX không tốt bằng
    • Có lẽ sẽ không dùng nó để thay thế Logic
  • Là một cách tiếp cận khác cho âm nhạc lập trình, xin đề xuất scamp cho Python
    • Tác giả đã đăng nhiều video lên YouTube
  • Vài năm trước đã từng xem một video YouTube tái hiện THX Deep Note bằng Sonic Pi
    • Ban đầu không giải thích sẽ làm gì, chỉ tinh chỉnh âm thanh từng chút một rồi cuối cùng tạo ra Deep Note
    • Thật tiếc là không thể tìm lại video đó
  • Gần đây đã nghĩ về Sonic Pi và xem vài video
    • Vài năm trước đã từng thử dùng nó trong thời gian ngắn
  • Chú thích HTML không hoạt động đúng. Trình soạn thảo biến hai dấu gạch nối thành một dấu gạch ngang dài
  • Gửi lời động viên đến live coder Sonic Pi alsoknownasrox
  • Bản demo thật sự rất tuyệt
    • Nhưng bố cục trang web bị vỡ trên Safari