CodeDrummer: リズムに着目したプログラム可聴化システム
佐丸藤山和一哉†
平†††貴寺井田重行††実†

プログラム動作を理解させるための，実行時における関数呼び出しの構造を音楽的な表現手法を導入して可聴化するシステムを提案する．ここでは，音楽のリズム表現を導入することで，可聴化した結果がエンタテインメントとして楽しみながら，かつプログラム動作の理解を支援できるようにすることを目指している．今回は，関数呼び出し構造に対し，異なる観点でリズムパターンの適用ができるようにし，その効果を確認できるようにした．

CodeDrummer: A System of Program Sonification Focused on the Rhythm
Kazuya Sato,† Shigeyuki Hirai,†† Kazutaka Maruyama†††and Minoru Terada†
We propose a program sonification system focused on the nesting structure of function calls
at the runtime. In this paper, we apply several sonification methods to various programs, andcompare their results. We use musical expression, especially rhytm patterns for the sonification. This enables the user to enjoy listening to the sound as an entertainment in addition tounderstanding the processing flow of the program.

ここでは音楽的な表現手法を導入した可聴化を主に

1. は じ め に考えており，本稿のシステムでは特にリズム演奏のパProcessing☆ や ActionScript☆☆ などによって，本ターンに着目した手法について扱うものとなっている．

来はプログラマではない人がプログラミングを行う音楽のリズム表現を導入することで，可聴化した結果場面が増えている．ただ，プログラミング初学者にをエンタテインメント的に楽しみながらプログラム動とっては，デバッガや開発環境の扱いに不慣れであっ作の理解を支援することが本研究の目的である．

たり，コンピュータそのものに対する知識が乏しいな

本稿では，リズムパターンによる可聴化のデザイン

ど，種々の理由によりプログラムの内部動作を把握しを行うことができるシステム CodeDrummer のコンたり確認することは難しい．アルゴリズムやその動作セプトと機能およびその実装について紹介する．また，の理解に対しては苦痛を強いられる場面も多いと言え関数の再帰呼び出しなど，関数呼び出しが重なりあいる．このような初学者の課題に対し，プログラム動作ながら，様々な処理を行うプログラムでは，異なる可の可視化や可聴化といった手法でプログラミングの学聴化手法を適用できることから，どういった効果が得

2)3)4)

習やデバッギングを支援する研究がある．

られるか検証したので，その結果についても述べる．

本研究では，特にプログラムの実行時における関数やメソッド呼び出しの構造の可聴化に注目し，様々なプログラムに対して異なる可聴化手法を適用して，その効果を確認するためのシステム開発を行っている．

2. CodeDrummer の概要
コンピュータプログラムは，関数呼び出しの順序や親子関係などによって，様々な動きが起こりうる．関† 電気通信大学大学院 情報通信工学専攻
The University of Electro-Communications†† 京都産業大学 コンピュータ理工学部
Kyoto Sangyo University††† 東京大学 情報基盤センター
Information Technology Center, The University ofTokyo

数呼び出しを可聴化することは，プログラムの規模に依らず，処理順序や呼び出しの深さなどに対して直感☆
☆☆

http://processing.org/
http://www.adobe.com/devnet/actionscript.html

情報処理学会 インタラクション 2011

的な理解を支援する可能性がある．

3. CodeDrummer の機能
3.1 ユーザインタフェース
ユーザインタフェースは以下が用意されている．

• 関数呼び出し構造の表示
現在実行中の関数呼び出し構造を階層的に表示する．

• シーケンス編集インタフェース
3.3.1 章にて後述する．
• 楽器割り当てインタフェース
各関数に割り当てる楽器を選択する．

• コントロールインタフェース
図 1 提案システムの画面構成
Fig. 1 Overview of proposal system

可聴化を行うプログラムの選択，再生，停止等を操作する．

3.2 可聴化手法
著者らは，プログラミング初学者がプログラム実行

本システムでは，以下の 3 種類の関数呼び出し単位を理解する際に重要な要素は，構文処理の順序より，を用いた可聴化を試すことができる．

ソースコード上における実行点の移動具合や変数の値

手法 1 各関数呼び出しに数拍のステップシーケンスの遷移情報であると考えており，可聴化においてもそれらの情報を重視したデザインを検討している．
著者らが以前に開発した CodeMusician1)

では，1行毎の実行をリズム楽器の発音に割り当て，関数呼び出しの際に関数名を読み上げる形で可聴化を行っていた．また，変数値の大小を音階に割り当てることで，を割り当てる
手法 2 各関数から深さ 1 の距離にある関数呼び出し集合を用いる
手法 3 ルートにあたる関数から各関数に至るまでの関数呼び出し列を用いる

3.3 手法1

特定の変数値の変化の様子を音の流れとして知覚するプログラム中で処理される関数毎にドラムセットにことが可能となっている．ただ，関数名の読み上げに属する楽器と数拍のリズムパターンを割り当て，該当ついて，1 ステップずつプログラムを実行する場合にする関数が呼び出されている間，その関数に対応するは判りやすさの観点で良いが，1 ステップずつ可聴化楽器音を発する．ここで呼び出しの深さが 2 以上となせずとも良い場合や，テンポを上げて実行したい場合

り，複数の関数呼び出しが重なる場合は，それぞれのなどでは，たくさんの読み上げが発生するために実行楽器音を同時に発する．の様子を把握することが難しくなるなど課題があった．

図 2 のような関数呼び出し構造をもつプログラムを本稿で新たに提案する可聴化システム CodeDrum-例とすると，図 3 に示すようなリズムパターンが生

mer では，基本的には CodeMusician と同様に関数成できる（関数名が記された四角形の色と，リズムパ呼び出し構造に注目した可聴化を行うものである．たターンで記された円形の色が対応している）．

だ，単に 1 行毎実行の発音を行うのではなく，各関数

3.3.1 関数ごとのシーケンス編集

呼び出しや関数の呼び出し深さ，関数呼び出しの木構

図 4 に示す画面上で，関数ごとの楽器とその楽器音造のパスをリズムパターンとして設定できるなど，呼が発するタイミングを選択できる．初期状態では 8 拍び出し構造に依存した可聴化のデザインができる機能のシーケンサが用意され，その 8 拍の中から鳴らしたの設計を行っている．ここで，リズムパターンとしてい拍を選択する．

可聴化を行うのは，関数呼び出しの重なり合う様子が3.4 手法

2

リズムパターンによって設定・提示することで，身近各関数から深さ 1 の距離にある関数呼び出し集合をなドラム演奏やリズムを連想させ，聴き取りやすくな用いる可聴化手法である．以降，この関数呼び出し集るのではないか，と考えたことによる．図 1 にその画合を子関数リストと定義する．また，深さが 2 以上の面構成を示す．

関数呼び出しについては，その先祖にあたる関数から生成される子関数リストによる音を重ね合わせることにした．図 5 のような関数呼び出し構造をもつプログ

CodeDrummer: リズムに着目したプログラム可聴化システム

図 2 例とするプログラムの関数呼び出し構造
Fig. 2 Function call tree of the example program

図 5 例とするプログラムの関数呼び出し構造
Fig. 5 Function call tree of the example program

図 6 手法 2 で生成したリズムパターン
Fig. 6 Rhythm pattern generated from method 2
図 3 手法 1 で生成したリズムパターン
Fig. 3 Rhythm pattern generated from method 1

図4

シーケンス編集インターフェース（QuickSort.main 関
数では 1,3,5,7 拍目に鳴らす）
Fig. 4 Sequence editor (Method of QuickSort.main has
1st, 3rd, 5th and 7th beats)

ラムを例とすると，図 6 に示すようなリズムパターンが生成できる．

3.5 手法3

ルートにあたる関数からリーフにあたる各関数に至

図 7 例とするプログラムの関数呼び出し構造
Fig. 7 Function call tree of the example program

るまでの関数呼び出し列を用いる可聴化手法である．
ここでも図 7 のような関数呼び出し構造をもつプログラムを例とすると，図 8 に示すようなリズムパターン

フェースは，Adobe Systems 社の Flex☆ を用いて作が生成できる．

成した．ドラム音源は BEST SERVICE 社の PS15

4. 実

装

4.1 インタフェース
音を出力する機構及び，グラフィカルな操作インタ

DANCE DRUM☆☆ を用いた．
☆
☆☆

http://www.adobe.com/jp/products/flex
http://www.crypton.co.jp/mp/do/prod?id=19750

情報処理学会 インタラクション 2011

解析し，要素の判別に応用するシステム4) など様々である．
図 8 手法 3 で生成したリズムパターン
Fig. 8 Rhythm pattern generated from method 3

6.1 Vickers らの研究2)
Vickers らは，プログラム言語 Pascal の教育において，音楽を用いたデバッギング支援手法を提案した．

4.2 コラボレーション機能

条件分岐文，繰り返し文といったプログラミング構成

本システムは，Web ブラウザ上で C や Java で記子の開始時点，終了時点や条件判定時点において，そ述されたソースコードをアップロードできる機能も含

れぞれ決められたメロディを並べ，音楽作品を生成し，まれており，他のユーザが可聴化したプログラムの試デバッギングに応用した．

聴，音の編集が可能である．

5. 考察

著者が本システムを試用し，主観評価に基づく考察を行った．

6.2 大澤の研究4)
大澤は，Java 言語の 1500 以上あるクラスの継承関係において，スーパークラスとサブクラスの継承関係の理解に音 (楽節) を用い，クラスの呼び出しの深さを単音の重ね合わせにより可聴化した．また，継承関

5.1 評価対象プログラム係の判別について評価を行い，テキストによる提示よ

評価対象とするプログラムは，プログラムの規模がりも音による提示の方が判別時間が短いという結果が大きく異なる以下の 2 つのプログラムを選択した．
例 1 HelloWorld プログラムをコンパイルするときの gcc の内部動作（関数呼び出し数:456）
例 2 Java で記述したクイックソートプログラム（関出ている．

7. お わ り に
本稿では，プログラムの実行時における関数呼び出数呼び出し数:30）

し構造に様々な可聴化手法を適用し，初学者がそれを5.2 各手法に関する考察

エンターテイメント的なものとして楽しみながら学習

手法 1 については，すべての関数が等しい拍数をできるシステムを開発した．今後の課題として，複数もったリズムパターンを用いるため，どちらのプログのユーザに本システムを利用してもらい，使用した感ラムについてもドラム音として聴くには満足のいく想や意見をいただきたい．また，どのような関数呼びものとなった．しかし，ユーザ自身でリズムパターン出し集合から音が生成されているのか視覚的にも理解を設定する必要があるため，適切に設定しないと，プしやすいユーザインタフェースを導入することで，初ログラムごとの音の違いが分かりにくいということが学者の理解がより向上することが考えられる．

あった．
手法 2 については，音の種類が多様で，子関数同士の音の重なりあうタイミングが頻繁に出現するため，飽きが来ず，特に例 1 のプログラムは興味深い音となった．さらに，処理が混み合っているタイミングとそうでないタイミングを容易に判別することができた．
手法 3 については，関数呼び出しの親子関係に関する判別は容易になったが，似たようなシーケンスが連続することが多く，拍数も音節ごとに変更が生じることが多いため，ドラム音として聴くには少々聴きづらいものとなった．また，現在の手法では複数の関数呼び出し列の音が重なることがないため，全体的に落ち着いた感じの音となった．

6. 関 連 研 究プログラム可聴化に関する研究は古くから行われており3) ，プログラム実行と並行して音を提示する動的なシステム2) や，プログラムを構成する要素を静的に

参 考

文献

1) 佐藤 和哉, 丸山 一貴, 寺田 実: CodeMusician:プログラム実行可聴化の試み, 第 3 回エンターテ
イメントと認知科学シンポジウム, (2009).
2) Paul Vickers , James L. Alty: Siren songs andswan songs debugging with music, Communications of the ACM, (2003).
3) Sonnenwald, D. H., et al. : Infosound: An audio aid to program comprehension. In 23rdHawaii International Conference on SystemSciences, (1990).
4) 大澤 範高: 継承関係の可聴化, 日本ソフトウェ
ア科学会第 8 回インタラクティブシステムとソフトウェアに関するワークショップ, 近代科学社,(2000).