• R/O
  • SSH

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

VGM playback library for Common Lisp


Commit MetaInfo

Révision8c1a808329078555a46129a9506882b8a40b1042 (tree)
l'heure2023-08-18 19:06:44
AuteurRemilia Scarlet <remilia@post...>
CommiterRemilia Scarlet

Message de Log

Add a very simple example player.

Change Summary

Modification

diff -r fa90ff7c6cda -r 8c1a80832907 simple-player.lisp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/simple-player.lisp Fri Aug 18 04:06:44 2023 -0600
@@ -0,0 +1,24 @@
1+(require 'cl-portaudio)
2+(require 'satou)
3+
4+(defun play-vgm (vgm)
5+ (check-type vgm (or string pathname))
6+
7+ (let* ((vgm (satou:read-vgm-file vgm))
8+ (player (satou:make-vgm-player vgm))
9+ (left (sdm:new-array 2048 single-float 0.0))
10+ (right (sdm:new-array 2048 single-float 0.0))
11+ (buf (sdm:new-array 4096 single-float 0.0)))
12+ (satou:vgm-player-play player)
13+ (pa:with-audio
14+ (pa:with-default-audio-stream (out 0 2 :frames-per-buffer 2048)
15+ (loop do
16+ (satou:vgm-player-render player left right)
17+ (loop for idx fixnum from 0 below 4096 by 2
18+ for idx2 fixnum from 0
19+ for smp-left single-float = (aref left idx2)
20+ for smp-right single-float = (aref right idx2)
21+ do (setf (aref buf idx) smp-left)
22+ (setf (aref buf (1+ idx)) smp-right))
23+ (pa:write-stream out buf)))))
24+ nil)