LAMEAudioFormat

はじめまして。
私は文字コードの知識などは全くありませんが、ちょうど同じような問題に取り組もうと思っていましたので私の当て勘を書かせていただきます。詳しい方がいらっしゃいましたら是非ご教授いただきたいです。

恐らくAudioFormatクラスが問題ではなくて、Stringクラスがお使いのテキストエディタのエンコーディングに対応しておらず(それは仕方がないことなのですが)、その結果metadata用のStringArrayクラスが保持しているデータも壊れてしまっているのではないかと思われます。

こちらにJulesが英語圏外(と言うべきなのか、charの範囲の外の、と書くべきか分かりませんが)の文字を入力する際の注意点を書いています。

曰く「StringクラスはUTF-8文字を想定しているけれども、コンパイラーはどんなタイプのエンコードを君のテキストエディタが使用しているのか知らないから、ソースファイルをセーブする時予想をするんだけど、それはだいたい間違っている。だからほとんどの場合、エンコードはエディターか、コンパイラか、ライブラリクラスかのどこかでゆがめられてしまう。唯一のクラスプラットフォームなunicodeをC++ソースに埋め込むやり方は ASCII + エスケープ文字にレベルを落とす(dumbing down)ことです。直接書くのはたいへんだけれども、幸運なことにIntrojucer(訳注:Projucerの前身)を開いて"UTF-8 String Literal Helper"を使えば、クソみたいな作業を代わりにやってくれて、unicode文字を安全なC++の式に変換してくれるから、それをコードにコピペすればいいよ。例えば以下のようにね
String textToDisplay = CharPointer_UTF8 ("\xe4\xb8\x80\xe4\xba\x9b\xe6\x96\x87\xe5\xad\x97");
とのことです。

このやり方だと、確かに静的な文字列は扱えますが、Yoshinori_Ogawaさんのおっしゃっているようなユーザーがメタデータを入力するような、入力が動的に変わるような場合に対応できません。
何かいい方法があればご教授いただければ幸いです。

JUCEの日本語ローカライズの一助になれば幸いです。

編集:訳文を付け足しました。最初いらないと思っていたのですが、私自身分かっていなかったことがありましたので、訳しました。