bloops 0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3cd9f25401e9862ac0cefccbc8db376e505b4a87211f79fe29d604cfda106b98
4
+ data.tar.gz: ca5d8575c212f385ab0d6bd80c61b6265a7d81b8f1d353643a800e12c844e8c8
5
+ SHA512:
6
+ metadata.gz: 4b72958048821906c0aad1fb8989d833799b09a7c8ab2f03b72add6a6eefc28e6750bddb79fcc38048f1a219444f1b2b2d882ba4ecb753fb6035575fb10894a1
7
+ data.tar.gz: 395c456eecfb898e86a01cdc55968e73f37dc728b634f6639872e33f89558ee51595286885aafe394c98bcb18a621f79d9d7a389d81a27b48f128686b6e88d19
data/COPYING ADDED
@@ -0,0 +1,27 @@
1
+
2
+ :$: BLOOPSAPHONE :$:
3
+ Copyright (c) 2009 why the lucky stiff
4
+ Based on sfxr (c) 2007 Tomas Pettersson
5
+ (Also released under the MIT license)
6
+
7
+ Permission is hereby granted, free of charge, to any person
8
+ obtaining a copy of this software and associated documentation
9
+ files (the "Software"), to deal in the Software without restriction,
10
+ including without limitation the rights to use, copy, modify, merge,
11
+ publish, distribute, sublicense, and/or sell copies of the Software,
12
+ and to permit persons to whom the Software is furnished to do so,
13
+ subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be
16
+ included in all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
19
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
20
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
21
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
22
+ SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
24
+ OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
data/Makefile ADDED
@@ -0,0 +1,60 @@
1
+ SRC = c/bloopsaphone.c c/notation.c
2
+ OBJ = ${SRC:.c=.o}
3
+
4
+ PREFIX = /usr/local
5
+ CC = gcc
6
+ AR = ar
7
+ ARFLAGS = cr
8
+ CFLAGS ?= -Wall
9
+ DEBUG ?= 0
10
+ ECHO = /bin/echo
11
+ INCS = -Ic
12
+ LDFLAGS ?=
13
+ LIBS = -lm -lportaudio
14
+ RAGEL = ragel
15
+
16
+ RAGELV = `${RAGEL} -v | sed "/ version /!d; s/.* version //; s/ .*//"`
17
+
18
+ all: bloopsaphone
19
+
20
+ rebuild: clean bloopsaphone
21
+
22
+ bloopsaphone: bloopsawhat bloopsalib
23
+
24
+ bloopsawhat: ${OBJ} c/bloopsawhat.o
25
+ @${ECHO} LINK bloopsawhat
26
+ @${CC} ${CFLAGS} ${OBJ} c/bloopsawhat.o ${LDFLAGS} ${LIBS} -o bloopsawhat
27
+
28
+ bloopsalib: ${OBJ}
29
+ @${ECHO} LINK bloopsalib
30
+ @${AR} ${ARFLAGS} libbloopsaphone.a ${OBJ}
31
+
32
+ c/notation.c: c/notation.rl
33
+ @if [ "${RAGELV}" != "6.3" ]; then \
34
+ if [ "${RAGELV}" != "6.2" ]; then \
35
+ ${ECHO} "** bloopsaphone may not work with ragel ${RAGELV}! try version 6.2 or 6.3."; \
36
+ fi; \
37
+ fi
38
+ @${ECHO} RAGEL c/notation.rl
39
+ @${RAGEL} c/notation.rl -C -o $@
40
+
41
+ %.o: %.c
42
+ @${ECHO} CC $<
43
+ @${CC} -c ${CFLAGS} ${INCS} -o $@ $<
44
+
45
+ clean:
46
+ @${ECHO} cleaning
47
+ @rm -f ${OBJ}
48
+ @rm -f c/notation.c c/*.o
49
+ @rm -f bloopsawhat libbloopsaphone.a bloopsaphone.so
50
+ @cd ext/ruby && make distclean || true
51
+
52
+ ruby: c/notation.c c/bloopsaphone.c
53
+ @${ECHO} RUBY extconf.rb
54
+ @cd ext/ruby && CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ruby extconf.rb && make
55
+ @${ECHO} ""
56
+ @${ECHO} "To test: cd ext/ruby"
57
+ @${ECHO} "Then: ruby test.rb"
58
+ @${ECHO} ""
59
+
60
+ .PHONY: all bloopsaphone clean rebuild ruby
data/README ADDED
@@ -0,0 +1,172 @@
1
+
2
+ |~~ |~~
3
+ | |
4
+ :$: bloopsaphone :$:
5
+ `''''''''''''''''`
6
+
7
+ for writing chiptune-style songs
8
+ in c or ruby. you know: the sounds
9
+ of ataris, gameboys and the like.
10
+
11
+ ~
12
+
13
+ -$- ABOUT
14
+
15
+ this is a small c library for sending
16
+ chiptunes through portaudio, which is
17
+ a rather light cross-platform audio lib.
18
+ <http://www.portaudio.com/>
19
+
20
+ right now i'm only including ruby
21
+ bindings. you are welcome to contribute
22
+ code to hook up to other languages,
23
+ though.
24
+
25
+ i wrote this for h-ety h.
26
+ <http://hacketyhack.net/>
27
+
28
+ i don't have binaries ready for this yet,
29
+ so if you're on windows or os x, you may
30
+ have to wait until HH comes out at ART
31
+ AND CODE. the tribulations you face.
32
+
33
+ ~
34
+
35
+ -$- THE BLOOPSAPHONE THEME SONG
36
+ (in ruby)
37
+
38
+ require 'bloops'
39
+
40
+ # the bloops o' phone
41
+ b = Bloops.new
42
+ b.tempo = 320
43
+
44
+ # melodious
45
+ s1 = b.sound Bloops::SQUARE
46
+ s1.punch = 0.5
47
+ s1.sustain = 0.4
48
+ s1.decay = 0.2
49
+ s1.arp = 0.4
50
+ s1.aspeed = 0.6
51
+ s1.repeat = 0.6
52
+ s1.phase = 0.2
53
+ s1.psweep = 0.2
54
+
55
+ # beats
56
+ s2 = b.sound Bloops::NOISE
57
+ s2.punch = 0.5
58
+ s2.sustain = 0.2
59
+ s2.decay = 0.4
60
+ s2.slide = -0.4
61
+ s2.phase = 0.2
62
+ s2.psweep = 0.2
63
+
64
+ # the tracks
65
+ b.tune s1, "f#5 c6 e4 b6 g5 d6 4 f#5 e5 c5 b6 c6 d6 4 "
66
+ b.tune s2, "4 c6 4 b5 4 4 e4 4 c6 4 b5 4 4 e4"
67
+
68
+ # and away we go
69
+ b.play
70
+ sleep 1 while !b.stopped?
71
+
72
+ ~
73
+
74
+ -$- BUILDING FOR RUBY
75
+
76
+ If Ruby is in your path and PortAudio 1.9
77
+ or greater is installed:
78
+
79
+ make ruby
80
+
81
+ To install PortAudio 1.9 under Ubuntu:
82
+
83
+ aptitude install portaudio19-dev
84
+
85
+ To build from source isn't too bad.
86
+ Download PortAudio 1.9 and build it.
87
+ <http://www.portaudio.com/archives/pa_stable_v19_20071207.tar.gz>
88
+
89
+ Like this:
90
+
91
+ $ tar xzvf pa_stable_v19_20071207.tar.gz
92
+ $ cd portaudio
93
+ $ ./configure
94
+ $ make
95
+ $ sudo make install
96
+
97
+ Then go back to Bloopsaphone and do
98
+ a `make ruby`.
99
+
100
+ ~
101
+
102
+ -$- THE IDEALS,
103
+
104
+ -1- ASYNCHRONOUS.
105
+ You send it a song and it plays in
106
+ the background. You'll get an event
107
+ when it finishes.
108
+
109
+ -2- SMALL.
110
+ This is just a toy, I don't want it
111
+ to be very big and comprehensive.
112
+ Just to play little tunes with a
113
+ nostalgic arcade sound rather than
114
+ the CASIO-stylings of most MIDI.
115
+
116
+ -3- CUSTOM NOTATION.
117
+ Someone told me about Nokring, iMelody,
118
+ numbered musical notation and I did
119
+ some reading. They're little languages
120
+ for texting yourself a ringtone.
121
+
122
+ <http://en.wikipedia.org/wiki/Ring_Tone_Transfer_Language>
123
+ <http://homepage.mac.com/alvinmok/ericsson/emelody.html>
124
+
125
+ Bloopsaphone uses a variation on RTTTL.
126
+
127
+ Instead of commas, I use whitespace.
128
+ A rest is simply a number. A plus sign
129
+ moves everything up an octave. A minus
130
+ down an octave.
131
+
132
+ The Simpsons' Theme, for instance, would be:
133
+
134
+ 32 + C E F# 8:A G E C - 8:A 8:F# 8:F# 8:F# 2:G
135
+
136
+ Which translates into:
137
+
138
+ * a 1/32nd note rest.
139
+ * change one octave up.
140
+ * C quarter note.
141
+ * E quarter note.
142
+ * F# quarter note.
143
+ * A eighth note.
144
+ * G quarter.
145
+ * E quarter.
146
+ * C one-quarter note.
147
+ * change one octave down.
148
+ * A eighth.
149
+ * Three F# eighths.
150
+ * G half note.
151
+
152
+ The colons are optional. They are there because you
153
+ can place an octave number after each note. Somehow
154
+ "8B6" (an eighth note of B at the sixth octave) looks
155
+ more confusing than "8:B6". I guess I figured that
156
+ the timing "8" is conceptually separate from the
157
+ actual tone "B6", even though they both comprise
158
+ the note itself.
159
+
160
+ -4- SERIALIZE SOUNDS.
161
+ To accomodate passing instruments between
162
+ ruby and c, bloopsaphone comes with a tiny
163
+ file format for describing sounds.
164
+
165
+ You can find examples of these in the sounds/
166
+ folder in this distro. Possible sound types
167
+ are 'square', 'sawtooth', 'sine' and 'noise'.
168
+ All other settings go from 0.0 to 1.0.
169
+
170
+ The 'freq' setting is only used if the sound
171
+ is played without a tune.
172
+
@@ -0,0 +1,46 @@
1
+ //
2
+ // threads.h - threaded garments for the bloopsaphone
3
+ //
4
+ #ifndef BLOOPSAPHONE_INTERNAL_H
5
+ #define BLOOPSAPHONE_INTERNAL_H
6
+
7
+ #ifdef _WIN32
8
+ #include <windows.h>
9
+ typedef CRITICAL_SECTION bloopsalock;
10
+ static inline void bloops_lock_init(bloopsalock *lock) {
11
+ InitializeCriticalSection(lock);
12
+ }
13
+ static inline void bloops_lock_acquire(bloopsalock *lock) {
14
+ EnterCriticalSection(lock);
15
+ }
16
+ static inline int bloops_lock_try_acquire(bloopsalock *lock) {
17
+ return !!TryEnterCriticalSection(lock);
18
+ }
19
+ static inline void bloops_lock_release(bloopsalock *lock) {
20
+ LeaveCriticalSection(lock);
21
+ }
22
+ static inline void bloops_lock_finalize(bloopsalock *lock) {
23
+ DeleteCriticalSection(lock);
24
+ }
25
+ #else
26
+ #include <pthread.h>
27
+ #include <errno.h>
28
+ typedef pthread_mutex_t bloopsalock;
29
+ static inline void bloops_lock_init(bloopsalock *lock) {
30
+ pthread_mutex_init(lock, NULL);
31
+ }
32
+ static inline void bloops_lock_acquire(bloopsalock *lock) {
33
+ pthread_mutex_lock(lock);
34
+ }
35
+ static inline int bloops_lock_try_acquire(bloopsalock *lock) {
36
+ return !pthread_mutex_trylock(lock);
37
+ }
38
+ static inline void bloops_lock_release(bloopsalock *lock) {
39
+ pthread_mutex_unlock(lock);
40
+ }
41
+ static inline void bloops_lock_finalize(bloopsalock *lock) {
42
+ pthread_mutex_destroy(lock);
43
+ }
44
+ #endif
45
+
46
+ #endif