Languages
 
 
 
 
[Page Last Modified: 17 Jan 2005]

Sound Player Plug-in For Pogoshell Now in .MBZ Format

This 60K plug-in is the compressed multiboot version of the Sound Player described further down the page. Installation instructions are in the enclosed readme file. Get it here

 

A JPEG Viewer Plug-in For Pogoshell

Another New Version

This new release comes in two alternative versions: pjpeg092.bin non-compressed, and pjpeg092.mbz compressed. Both are actually multiboot programs and run from EWRAM, although this is invisible to the user. The .mbz version takes up less cart space and has other space-saving virtues. This version is now power-saving! and the source code is available.

 

This is a replacement JPEG viewer plug-in for Pogoshell. The original, distributed with Pogoshell has some distinct problems. It certainly doesn't correctly display any of the JPEGs I've tried with it. The two obvious problems I noticed are:

  • If the JPEG contains a thumbnail, the thumbnail is displayed instead of the correct picture
  • If the Restart Intervals are not as the decoder expects the picture is badly corrupted.

The new viewer deals with these problems successfully. It is slightly larger than the original one.

Many thanks go to Burton Radons for placing his jpeg code in the public domain.

Installation instructions are in the enclosed readme file. Get it here

A Sound Player Plug-in For Pogoshell

This combines the twp plug-ins below and effectively replaces them. It is the same size as the MIDI file plug-in. Installation instructions are in the enclosed readme file. Get it here

A .WAV File Plug-in For Pogoshell

Introduction

Pogoshell is a excellent front-end program for the Gameboy Advance. It was drawn to my attention by a user of Book Reader who requested an exit function to return to Pogoshell. (Book Reader has this function from V4.5 - press Start + Select together). Pogoshell is a very attractive functional environment, which manages 'saves' intelligently. I was planning to provide links to its web site here but the author unfortunately didn't reply to my email.

For the sake of completeness rather than as a technical breakthrough, I have written a .wav file plug-in for Pogoshell.

This plug-in for Pogoshell is based on code intended for use in Book Reader. It may be downloaded and used freely. I would suggest retaining the file name as I plan improved versions and the file name is the only way to know which version you have.

Capabilities

Use it for pretending that your GBA has an MP3-like music playback capability. Of course, the size of the files is the problem.

The files currently have to be PCM, 1 or 2 channel (mono or stereo). They can be any number of bits per sample up to 16. They can be at any bit rate. To reduce the size of your file to a sensible level use an application such as Goldwave to convert your wav file to 8 bit mono, with a sampling rate of 18157 bits per second. This gives a smaller file size optimised for the playback sampling rate.

From V0.91 the file may also be encoded as Microsoft ADPCM, (mono only and no higher than 22050 Hz, or it will not be played). In my opinion this format is not very successful, though it does result in smaller files. At 11025 Hz you can fit a whole album onto a cartridge.

V0.91 also has a volume increase over the previous version.

V0.92 has a bug fix to stop crackles etc. caused by leaving unused interrupts on. Thanks to weaaddar and Horscht for helpful reports.

Installation in Pogoshell

Get it here

  • Place the pwav091.bin file in your Pogoshell .plugins folder.
  • Create a folder for your WAV files and put some *.wav files into it. Well maybe just one till you see how big they are...
  • Edit the file filetypes in the .shell folder by adding the line shown in red below (all one line - even if shown wrapped below)
 

5
txt 4 TXT
diz 4 TXT
nfo 4 TXT
cfg 4 TXT
sav 12 SAV
set 11 SET
mod 3 /.plugins/modplay.bin Playing music, press START to quit
cw 3 /.plugins/modplay.bin Playing music, press START to quit
cwz 3 /.plugins/modplay.bin Playing music, press START to quit
mdz 3 /.plugins/modplay.bin Playing music, press START to quit
k3m 3 /.plugins/krawall.bin Playing music, press START to quit
wav 3 /.plugins/pwav091.bin Playing wav file, press B to quit
nes 1
zcode 1 /.plugins/frotz.bin
gba 1 EXE
bin 2 EXE
nsf 3 /.plugins/nsf.bin Playing NES music, press START to quit
mb 2 MB
bmp 6
font 7 FNT

 
  • Create your ROM in the usual way...

A MIDI Plug-in For Pogoshell

Introduction

This plug-in for Pogoshell is based on the code used in Book Reader. It may be downloaded and used freely. I would suggest retaining the file name as I plan improved versions and the file name is the only way to know which version you have.

Capabilities

The MIDI capabilities are as follows:

  • up to 8 simultaneous voices
  • digitally sampled instrument sounds

 

How the MIDI file is played

Unlike the version in Book Reader this player works with MIDI files as they are found, with no re-processing. This means more work at the time they are played as the midi clock has to be reconciled with the asynchronous frame rate.

The approach here was to check once per frame (about 1/60 sec) how many midi clocks had passed (keeping track of the fractional midi clocks) and checking the file for events for each midi clock. This has the effect of moving all events to the nearest tick of the frame rate clock. This does not appear to be noticable.

Events in the MIDI file cause 'Note On' and 'Note Off' commands. These cause changes to an 8 voice wide array of currently playing notes (or percussion sounds). If a note is to be started, the array is searched for an unused voice. If none is found then the oldest playing note is stopped to make room.

The mixer uses this array to determine which samples to mix for the current frame. Two 304 byte buffers are used for the mixer to write to on a given frame, and another two are simultaneously being transferred to the sound FIFOs using DMA at 18157Hz. Each buffer has 4 voices mixed into it. The output of the 2 FIFOs is mixed into both left and right channel to produce a mono sound output.

This approach allows more accurate sound samples than if 8 voices were mixed into the one buffer. The original samples have to be restricted in amplitude so that adding several channels together does not cause the sum to exceed the available range. The more channels mixed together, the lower the permissible amplitude of each channel and the more distortion (digital noise) which will be produced.

The mixer is written in C, so is not particularly fast. It is completely sufficient for the current application. I may optimise it in assembler for something to do in the future.

Other MIDI commands which are currently processed are Set Channel Volume, and Set Tempo.

Limitations

  • The available sound samples currently include Organ, Harpsichord, Strings, Trumpet, 2 drum sounds and a cymbal sound.
  • The relative sample volumes are not very consistent.
  • Note endings after release are abrupt cutoffs, rather than proper release fading (although the normal decay during a sounding [e.g. piano] note is handled properly).
  • The strings have too long an attack time, so on some pieces the strings sound like they're being played backwards.
  • The organ sample chosen was very compact, but has too little harmonic content. The result is that low frequency notes, played through the Gameboy Advance 'speaker' sound more like distortion than musical notes.
  • Percussion channel is assumed to be 10 - no attempt is made to sense the channel or allow the user to change it in this version.

Release V0.9

Changes to this version
  • Samples have been improved using a new app which specifies the samples and combines them at the click of a mouse. This makes trying a small change to a sample much faster.
  • Samples used are Piano, Harpsichord, Sax, Church Organ, Steel Guitar, Distortion Guitar, Flute, Marimba, Trumpet, Violin, String Ensemble, Drum, Bass Drum, High Hat
  • Full envelope control is now available though not much used.
  • Bug fixes prevent failure caused by 'Polyphonic Key Pressure', 'Channel Pressure', 'Pitch Bend' and 'System Exclusive' messages. (Now doesn't fall over playing the example files I was sent. Don't get me wrong; I still don't handle these messages, I just ignore them correctly!)
  • Fine tuned the frequencies in the loop sections.

Release V0.91

Changes to this version
  • Added a further Electric Organ sample as the Church Organ didn't work with Rock.
  • Implemented 'Pitch Bend' which gives big improvement on midi files which use it

 

Installation in Pogoshell

Get it here

  • Place the midi091.bin file in your Pogoshell .plugins folder.
  • Create a folder for your MIDI files and put some *.mid files into it.
  • Edit the file filetypes in the .shell folder by adding the line shown in red below (all one line - even if shown wrapped below)
 

5
txt 4 TXT
diz 4 TXT
nfo 4 TXT
cfg 4 TXT
sav 12 SAV
set 11 SET
mod 3 /.plugins/modplay.bin Playing music, press START to quit
cw 3 /.plugins/modplay.bin Playing music, press START to quit
cwz 3 /.plugins/modplay.bin Playing music, press START to quit
mdz 3 /.plugins/modplay.bin Playing music, press START to quit
k3m 3 /.plugins/krawall.bin Playing music, press START to quit
mid 3 /.plugins/midi091.bin Playing music, press START to quit
nes 1
zcode 1 /.plugins/frotz.bin
gba 1 EXE
bin 2 EXE
nsf 3 /.plugins/nsf.bin Playing NES music, press START to quit
mb 2 MB
bmp 6
font 7 FNT

 
  • I also took the opportunity to fix that annoying spelling mistake in texts in the .shell folder
  .....
Hide known extensions
.....

 
  • Create your ROM in the usual way...

Address for comments, etc:

pc@bookreader.co.uk

Pogoshell Links

I plan to put a set of links to the main Pogoshell sites here...