My OS X Programming Blog
Mac OS X Cocoa and CoreMIDI Programming
About Andrew Choi


MIDI Programs

MIDI File Player (External Device)

MIDI Destination Pop-Up Button

MIDI File Player (Internal Synth)

MusicSequence Sample Code

MIDI File Writer

MIDI Name Document Parser

NameConfigSetup

Fish Creek MIDI Framework

MidnamUtility

SysExSenderX

Other Programs

FCBlogEditor

FCBlog and Patch

Chinese Checkers Program

jyut6 ping3 Cantonese Input Method

Cocoa Sample Programs

Syntax Coloring Using Flex

NSTextField and Undo

NSToolbar

Implementing File Import

Launch Application and Open URL

Saving Uncommitted Text Field Edits

Algorithms

Jazz Chord Analysis as Optimization

Optimal Line Breaking for Music

Optimal Chord Spacing

   

A blog where I will write mostly about programming in Cocoa and CoreMIDI, and experiences from my ports of Emacs and XEmacs to the Mac OS.

Random Panther Bits
Thursday October 30, 2003

Xcode happily opens and builds my ProjectBuilder projects. Having used the latter for about two months, I'm a little disoriented in Xcode. But it looks easy enough to use. I like the way it deals with searches and symbols.

Panther installs a Python 2.3 framework in /System/Library/Frameworks/. Embedding Python in applications is therefore now easier.

Emacs works. Panther installs texinfo 4.6. So Emacs now really “builds out of the box”. A long standing problem with pseudo terminals has been fixed in Darwin 7.0. Emacs on OS X is now more consistent with itself on other Unixes.

Obtaining MIDI external devices connected to devices now seems to work differently. External devices now have “ports” (probably entities in CoreMIDI documentation), which are specified in MIDI Audio Setup. This messes up the strategy I was using for identify sysex devices. I need to fix this in FCM.

I read on the coreaudio-api list that MIDIThruConnection now works correctly in Panther. MIDIThruConnection is useful for implementing “play-through” instruments in a sequencer. MIDI event send and receive do not have high real-time requirements, so long as events are scheduled in time, and recording buffers are emptied fast enough.

Fonts are nicer in Panther. No noticeable increase in speed in Finder. Many human interface elements of Jaguar actually looked better. Brush metal is ugly. Blue bubbles behind filenames look like XP. Clock.app is gone (the one from 10.2 still works!). Very glad I discovered Mozilla Firebird today.

Birds!!
Wednesday October 29, 2003

It took a whole day to backup everything on my hard disk so I can install Panther! Just got Emacs back running again and it's already past midnight!

No programs today. Just a picture of birds on a tree in front of my window. Reminds me of the Hitchcock movie.

DX7 II MIDI Name Document Utility
Tuesday October 28, 2003

As promised, here is a program that fetches the names of the current performances and voices from a DX7-II and writes out a .midnam file that represents them.

It's quite easy to write once everything has been figured out, e.g., how to initiate a bulk dump from the DX7-II remotely. The latter I did by monitoring sysex messages sent by Opcode Galaxy when reading a bundle from the DX7-II.

I also went down to the store to get a copy of Panther today. They just came in! Will probably spend tomorrow backing up data and installing it.

A MIDI Name Document Generator!
Monday October 27, 2003

It's only logical that I also wrote this MIDI Name Document generator. It writes an in-core Foundation collection representation of a .midnam file, such as one produced by the parser in MidnamParserTest, to a .midnam file.

The test program reads a .midnam file named by the first argument, parses it using the MidnamParserTest parser, then writes out the corresponding .midnam file named by the second argument. Core Foundation's CFXMLTreeCreateXMLData function writes XML data without newlines. So use the .midnam program from libxslt to view the program's output as follows.

xmllint --format <xml file>
With this code, I can, e.g., write my own version of CherryPicker. More interestingly, with the sysex send and receive library, I can write a utility to read patch names from a synthesizer and write out a .midnam file corresponding to its current patches! That's much better than factory names if you ever edit patches on your synths :-). This will be my next project.

October 2003
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

November 2003
Sun Mon Tue Wed Thu Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Sep  Dec

xml

Search this blog with


Lists

Less-Known Facts About Emacs

Emacs Rants

Chinese Restaurants in Calgary

Calgary/Banff Tourist Attractions

C++ Reading List

Science Fiction Series

Top-10 Reason I Stopped Working on Emacs

Top-10 Types of Questions I Get About Emacs

10 Defining Moments as Programmer


Misc

Carbon XEmacs

Emacs for Mac OS X


Copyright © 2003, 2004, 2005 Andrew Choi (Contact Information). Created with FCBlog