2016-02-21 07:11:10 (edited by magurp244 2016-03-12 21:20:06)

Hello everyone. BrushTone is an accessible Paint Tool that allows users to view, modify, and create images purely using sound. Though there is a visual interface for those with vision. If you'd like to jump right in: For best performance, Disable Display Scaling on High DPI Settings and run it in compatibility mode for WinXP SP3.

You can get the latest version from itch.io here: BrushTone v1.2.2

So, what can it do, and how does it work? You can press F12 for the help menu and use the arrow keys to select categories and topics, or check the readme for full descriptions of the commands and how they work. Here's a quick run down: Each pixel is represented by 3 values, Red, Green, and Blue. These RGB values are in turn represented by 3 sequential beeps, the pitch of each beep represents how bright each color value is, the higher the pitch, the brighter the color, the lower the pitch, the darker the color.

Tools include: Pencil, Line, Square, Full Square, Circle, Full Circle, Flood Fill, Select, Cut, Copy, Paste, Flip, Rotate, Stretch, Skew, Invert Colors, Grey Scale, Adjust RGB, Cycle Colors, RGB Explode, RGB Condense, Slice, Stitch, Create/Delete Alpha Channel, and Alpha Paint Mode.

In addition its equipped with a Window Scan that moves the cursor horrizontally across the screen along vertical steps, and includes Peter Meijers Image to Sound Algorithm. It can also load multiple images allowing you to tab between them, including Animated GIFs. The Image to Sound Renderer also includes support for Animation play back with  "Batch" and "Loop" settings, allowing users to cycle through frames continuously to view animations.

As of version 1.1, it now also supports Braille Display.

Some Issues: BrushTone can only load files in the current working directory, and while it can load animated GIFs, it can't save them. Scaling performance on the Flood Fill algorithm could be better, it can take approximately 40 seconds to fill a 2000 by 2000 image. The Circle Tool may also produce small gaps at the far ends of narrow circles.


If anyone has any questions, comments, suggestions, or problems, feel free to drop a post, heh. Enjoy!

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-21 07:15:48

hold on a minute, isn't new releases strictly for new game/mod releases? Shouldn't non game related releases be in the off topic room?

be a hero and stop Coppa now!
https://docs.google.com/document/d/1Dkm … DkWZ8/edit
-id software, 1995

2016-02-21 07:21:32

Is it? New releases seems an ambiguous title that could cover a number of applications, not neccessarily restricted to games. Of course I could be mistaken?

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-21 11:50:12

Moderation!

New releases is indeed as Americandad said, for new game releases, this is covered in the faq.

I suppose this could be called "new game releases" but because this is audiogames.net and thus is a site about games that seemed a little superfluous.

Either way, thanks a lot for the tool, it sounds like a really interesting one, but I will indeed  move this topic.

With our dreaming and singing, Ceaseless and sorrowless we! The glory about us clinging Of the glorious futures we see,
Our souls with high music ringing; O men! It must ever be
That we dwell in our dreaming and singing, A little apart from ye. (Arthur O'Shaughnessy 1873.)

2016-02-21 12:13:48

Hi Magurp, thanks for this topic. It's an interesting program. I have a problem. I have Windows 8.1 64 bit. When I launch the program I can only press e to scan and I can hear the tones. But if I press f1 f2 or f12 the program exits. What can I do to access the menues?

2016-02-21 22:22:21

@Dark
Ah, well I suppose that makes sense. My appologies for the mix up, heh.

@ambros86
Have you tried running it in Compatibility mode for Windows XP SP3, and Disabling Display Scaling on High DPI settings? Does the speech play properly? If it continues to be a problem I can email you a debug build to try and figure out whats going on.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-21 22:31:34 (edited by ambro86 2016-02-21 22:32:21)

Hi Magurp, yes I've tried it too. Compatibility service pack 3 and disable scale ecc. When I run it, if I press the e key i can ear the three tones of the same note that represent I imagine the blank space. But for example, when the tones play I press the f1 key to go into the menu, the tones stop playing and the program exits. I have tried also to launch the program with administrator rights. But nothing changes.

2016-02-21 22:41:45

Hmm, strange. I've uploaded a new build you can get here, could you open a command prompt and run Brushtone from it? When it crashes, copy paste the last few lines from the command prompt, if any.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-21 23:41:39 (edited by ambro86 2016-02-21 23:44:11)

Ok. I've made the procedure and these are the dibag lines. Thanks for your support. When at the end of the lines says eccezione is the italian term for exception:

C:\BrushTone-Debug>BrushTone-v1.0-x32-Debug.exe
Usage: BrushTone-v1.0-x32-Debug.exe wavefile
    Using an example wav file...
Usage: BrushTone-v1.0-x32-Debug.exe wavefile
    Using an example wav file...
Usage: BrushTone-v1.0-x32-Debug.exe wavefile
    Using an example wav file...
Traceback (most recent call last):
  File "<string>", line 11, in <module>
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyglet.app", line
143, in run
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyglet.app.base",
line 136, in run
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyglet.app.base",
line 165, in _run_estimated
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyglet.app.base",
line 274, in idle
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyglet.clock", lin
e 309, in call_scheduled_functions
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\Remod183", line 16
9, in update
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\Remod183", line 46
35, in update
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyttsx.engine", li
ne 120, in stop
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyttsx.driver", li
ne 163, in stop
  File "D:\compile\BrushTone-full\build\loader3\out00-PYZ.pyz\pyttsx.drivers.sap
i5", line 72, in stop
  File "<COMObject SAPI.SPVoice>", line 3, in Speak
pywintypes.com_error: (-2147352567, 'Eccezione.', (0, None, None, None, 0, -2147
221164), None)
AL lib: (EE) alc_cleanup: 1 device not closed

C:\BrushTone-Debug>

2016-02-22 01:08:29 (edited by magurp244 2016-02-22 05:22:41)

The problem appears to be with Pywin32 and the Sapi5 drivers for the TTS engine. After some digging It seems like it could either be a COM access conflict between 32bit and 64bit calls, or a problem with the windows 8.1 Sapi drivers, which have been known to cause issues in the past. You could try reinstalling the Sapi5 drivers, another possibility could be conflicts with 32 bit voice packs, you could try the fix discussed here.

Also, though i'm not fond of the idea, you could also try upgrading to windows 10, previous tests on win 10 builds didn't present any issues.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-22 15:41:54 (edited by ambro86 2016-02-22 15:42:38)

Hi, thanks for your information. I've tried to follow the guide for sapi but problem is Always there. The only way I've found to use it is to install Windows 10 in a virtual machine. The program is very interesting. But how can I draw? If I go in pencil and select square or circle I don't know how to draw it.
Another thing is that when I load tells me that there is only one image but in the folder I see more than one.

2016-02-22 22:25:59 (edited by magurp244 2016-02-22 22:27:23)

I'm glad you found a solution to get it working.

When using Tools like Square, Circle, or Line, pressing Space Bar or the Left Mouse Button places an Anchor Point, you then move the arrow keys to determine the size of the square by its opposite corners, or the radius of the circle from its center, or each end point of the Line. When its the size you want, press Space Bar or Left Mouse Button again to apply it to the canvas. Other tools like Flood Fill or Pencil require only one press of the Space Bar or Left Mouse Button. You can also press and hold the Space Bar and Left Mouse Button with the Pencil tool, and use the arrow keys to paint continuously.

When loading files, when it starts saying the names of files, use the Up and Down arrow keys to select which file you want to load, then press enter.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-23 01:46:07

Hi Magurp, I've tried and now I can use the pencil and it's beautiful to draw for me that I am completely blind. For now I drew only simple figures, like squares and lines and finally a cell table.
The only thing I can say is that for hard pictures, like a person, or the nature, I don't know if I can comprehend them only listening to scan sound. But your project is very cool because is the first program I've found to draw for a blind person!

2016-02-23 05:17:41

Reading larger scale or complex images is a difficult problem to solve, you can view entire images by initializing the Sonifier, but anything larger than 64 by 64 loses detail when converting them to sound. There are a few work arounds though, such as using the Slice tool to carve up the image into evenly sized pieces, and then use the Sonifier with Batch enabled to scan each section one after the other. By cutting them up into smaller pieces, less detail is lost when converting them. You can also use the Select tool to select a region to exclusively scan with either the Window Scan or Sonifier. Alternatively you can also apply Transformations, like converting the image to Grey Scale, inverting the colors, resizing it, or any combination there of to try and make it easier to read.

Having said that though, art comes in many different shapes, sizes, and styles, as such some kinds of art may be easier to use and read with BrushTone than others. Line Art focuses on black outlines, Vector Art on judicious use of solid colors. Pixel Art may be the easier one to work with, as it uses limited colors and emphasises working on individual pixels to make small images, NES sprites are a good example. It can take time and patience to find a style and method that works for you. But more importantly, you should enjoy yourself and have fun.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-23 05:32:14 (edited by ambro86 2016-02-23 06:11:43)

Thanks for your reply Magurp, I will try. One thing I think can improve a lot your program, is to make also conversion to braille dots. And I think is not hard, because you can convert every dot of the figure with the 6 braille dots that covers one entire braille cell. So in this way I can read line by line using braille screen, and when is blank the braille is blank, without dots, and when are dots you can use 6dots braille.
The braille simble that covers all 6 dots is %. So an orizontal line can be view in this way (note, use a braille screen):
%%%%%%%%%%%%%%%%%%
And a vertical:
%
%
%
%

2016-02-23 08:18:00

Hmm, thats an interesting idea. I guess it wouldn't work that differently from the Window Scan in a way. Its difficult to convey all the necessary data in such a display though, such as the Red, Green, Blue, and Alpha values, and the level of brightness of each pixel. Though it may be possible to use a single Braille character to represent brightness and allow configuring it to display different color values like the sonifier. I might be able to implement something, but unfortunately I don't have a Braille Display to test it on and they can be rather expensive.

Its gotten me thinking though of a prototype tactile display from MIT called inFORM I heard about awhile ago, its consists of a grid of pins that raise and lower to create 3D shapes and displays of visual data. I think something like that could work well with BrushTone.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-23 11:33:16

I think accessible_output2 handles braille displays and screen reader output in the majority of cases, but my display isn't working so I haven't been able to test it.
I did write some pixel-data-to-braille functions. I don't remember if it was one (scaled) row per line, or if I tried to cram 3px into a single cell.

Actually, here's the relevant code from my last attempt. It doesn't include outputting to a display, just converting the data to English Computer Braille:

# For braille
# Does not interact with braille devices directly.

# English ascii braille in bitwise order
brlChars=[
' ', 'a', '1', 'b', '\'', 'k', '2', 'l',
'`', 'c', 'i', 'f', '/', 'm', 's', 'p',
 '\"', 'e', '3', 'h', '9', 'o', '6', 'r',
'~', 'd', 'j', 'g', '>', 'n', 't', 'q',
',', '*', '5', '<', '-', 'u', '8', 'v',
'.', '%', '{', '$', '+', 'x', '!', '&',
';', ':', '|', '0', 'z', '7', '(',
 '_', '?', 'w', '}', '#', 'y', ')', '=']


def brlPX(c) :
    global brlChars
    """ Function for retrieving the braille character that best represents the given color.
        Output only contains 6 bits, so color depth is truncated accordingly."""
    
    if c is None :
        return ' '
    bits=0
    r, g, b=c
    # IMPORTANT: assumes values in the range (0, 255).
    bits=(
 ((r&64)>>6)|((r&128)>>4)|
 ((g&64)>>5)|((g&128)>>3)|
 ((b&64)>>4)|((b&128)>>2)
)
    return brlChars[bits]

def brlImg(img=None) :
    global _current
    if img is None :
        img=_current
    
    # Be sure that the array is row major?
    
    w=len(img)
    h=len(img[0])
    ret=[""]*h;
    
    # todo: Optimize for speed. String Builders?
    for y in xrange(h) :
        ret[y]= ''.join([brlPX(img[x][y]) for x in xrange(w)])
        
    return ret

def brlLine(img=None, pos=None, size=100) :
    global _current, cursor_x, cursor_y
    """ Returns a single line of braille, optionally fit to the active display."""
    if img is None :
        img=_current
    if pos is None :
        pos=(cursor_x, cursor_y)
    halfsize=int(size/2)
    h=len(img)
    w=len(img[0])
    end_x=min(pos[0]+halfsize, w)
    start_x=min(max(0, pos[0]-halfsize), end_x-size)
    
    return ''.join([brlPX(img[start_x+x][pos[1]]) for x in xrange(end_x-start_x)])

def get(x, y) :
    ret=get_color(pos=(x, y))
    if ret=='' or ret=="" :
        ret=str(_current[x][y])
    return ret
看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2016-02-23 22:44:45 (edited by magurp244 2016-02-23 22:47:20)

Looking around there seems to be a few Braille API's with python bindings, like libbraille and Liblouis*. I've tried using Accessible_output2 a few times, but the lack of documentation and dependancies makes it difficult. Converting to Braille may not be that difficult, I could output it as text to the screen. Could that be picked up and read by screen readers to be parsed by Braille Displays?

I think there would be room for a few different modes, putting the brightness of 3 pixels into a single cell along horrizontal rows as you suggest could work. Another way could also be to try displaying a single pixel on a single cell by using the horrizontal rows for red, green, and blue values too. Still, short of displaying each pixel across 9 to 12 or so cells there's no avoiding compromises in detail.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-24 03:48:07 (edited by ambro86 2016-02-24 03:51:37)

Yes Magurp, you can output it as text to the screen. Because the only way to use a braille screen with a computer is to use in combination with a screen reader, that sends the indications to the braille screen. Otherwise you have to incorporate in your program the braille screen drivers. So you can convert to normal text using normal letters, and the screen reader do the rest for you.
The only problem is, that when I try to use your program with a screen reader, that interfer with Arrow Keys, for example. But this thing is resolvible.

2016-02-24 08:59:14

If you use a standard windows title bar, screen readers usually pick up changes and send them to any attached displays.

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2016-02-25 00:06:24

Do you mean altering and using the text of the window title bar itself? I've run a few tests with NVDA and it seems the title bars the only thing it picks up, which is fine if thats the case. All the other attempts to display text in the window proper though don't seem to work though.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-25 19:00:31

This program sounds cool. I'm gonna download it today
Hope it isn't confusing

Feel free to follow me on Twitter @thecoolgamer4 and subscribe to my Youtube channel

2016-02-25 22:39:00

I like this

Facts with Tom MacDonald, Adam Calhoun, and Dax
End racism
End division
Become united

2016-02-27 04:31:42

Bleh, anybody else keep getting a "500 Internal Server Error" when trying to access audiogames.net?

Anyway, i've just uploaded v1.1, it includes a few minor performance fixes and Braile Display support for RGB and multi-row display. I'm not entirely sure if I got the braille symbols right, I looked up a chart for the keyboard braille symbols so I hope it doesn't read incorrectly. Press F6 to cycle through the 2 different modes and to deactivate it.

Here's how it works: In RGB mode the top, middle, and bottom rows of a single Braille cell represent the Red, Green, and Blue values of a single pixel. If the value is 0, then the corresponding row will have no dots. If the value is greater than 0 and less than 85 there will be one dot on the left. If the value is greater than 85 and less than 170 there will be two dots. If the value is greater than 170 and less than or equal to 255, there will be a dot on the right. For the sake of orientation, it will only display the pixels starting at the cursors position, moving to the right edge of the canvas.

For Multi-Row mode, the top, middle, and bottom rows of a single Braille Cell represent the top, current, and bottom rows relative to the cursor. It functions the same as in RGB mode, but the values represent each pixels overall brightness as opposed individual RGB elements.

-BrushTone v1.3.3: Accessible Paint Tool
-AudiMesh3D v1.0.0: Accessible 3D Model Viewer

2016-02-29 01:37:33

Thanks Magurp! I will try your program soon in the new version with braille display and thanks for that, because it is a very rare kind of program, that for blind community lacks!
Yes I had also 500 error for audiogames.net.
Cheers!