mp3タグ書き込みツールのid3v2とその依存ライブラリid3libで、UTF-8文字列を渡せるようにした。
要は、UTF-8文字列で日本語を渡せるようにして、mp3タグをiTunesコンパチで書き込むようにしたってこと。
ちなみにmp3タグ内部ではUTF-16BEを使用しています。
cd /usr/ports/audio/id3lib
cp id3lib-3.8.3.src.field.cpp.diff files/patch-zzz
make reinstall
cd /usr/ports/audio/id3v2
cp id3v2-0.1.12.id3v2.cpp.diff files/patch-zzz
make reinstall
id3v2コマンドに-Uオプションを追加しました。id3libの初期動作が変更になっているので、-Uオプションを外した場合にちゃんと使えない可能性があります。
id3v2 -U -A "album title of UTF-8 string" test.mp3
mpg123と、musicpc/musicpdで日本語が表示できることを確認しました。
これで、FreeBSDを音楽サーバーとして使っても曲名が文字化けせずに済んでいる。
p.s.
id3libに対してUTF16BEなんちゃらと言うマクロを渡すとUTF-16LEが設定されて日本語が文字化けしてた...。
UTF16なんちゃらと言うマクロを渡したらUTF-16BEが設定されてちゃんと日本語文字が出た。
ちょっと騙された!
cd /usr/ports/audio/libao
cp (patchダウンロードディレクトリ)/libao-1.2.0_src_plugins_oss_ao_oss.c.diff files/patch-zzz
make clean
make (re)install
cd /usr/ports/audio/flac123
mkdir files
cp (patchダウンロードディレクトリ)/flac123-0.0.12_flac123.c.diff files/patch-zzz
make clean
make (re)install
Tue Jan 24 08:08:31 JST 2023: device numberを指定できるようにした。
cd /usr/ports/x11-fonts/xfontsel
mkdir files
cp (patchダウンロードディレクトリ)/patch-xfontsel.c.diff files/
make clean
make (re)install
fontリスト最大数が32767個決め打ちだったので1048575個に変更しただけ。
超簡単。
SJIS環境専用なので(patch内のfont名をSJISで記述しているためで、ソースの漢字コードを変換すればSJIS以外でも使用可能です)、xnp2-0.86/x11/compiler.hのOSLANGを
#define OSLANG_SJIS
に修正してからビルド&install。
(FreeBSDの場合)
cd xnp2-0.86/x11
patch -p2 < xnp2-0.86_x11_gtk2_gtk_font.c.diff
make && make install
pkg install japanese/font-mona-ipa
fc-cache -s
rm ~/.np2/font.tmp
./xnp21 <floppy1> <floppy2>
patchの内容は、fontに「IPA モナー ゴシック」を使うようにしたのと(これが一番良い)、次点の「東風ゴシック」の場合でもその半角カナをなんとか読めるように対策しただけ。
実機からFONT.ROMを吸い出すまでの緊急避難用にfontを読めるようにしただけで、実際にはもう不要なのでこれ以上は対策しないと思います。
それから、2021/06/04時点のFreeBSD pkgのpangoではfontをうまく切り替えられないバグがあるけど(portsでは直ってた)、それでも「Kochi Gothic」だとどちらでもちゃんと読めたので、ソース(xnp2-0.86/x11/gtk2/gtk_font.c)内のfont設定を「Kochi Gothic」に変更すれば大丈夫です。
以上。
cd /usr/src
patch < (パッチファイルの保存ディレクトリ)/tcsh.sh.print.c.diff
それから、
cd bin/csh; make && make install
もしくは、
env DESTDIR= make world
cd /usr/src
patch < (パッチファイルの保存ディレクトリ)/tools_tools_locale_etc_charmaps_SJIS.TXT.diff
それから、
cd /usr/src/tools/tools/locale; env PATH="/usr/local/netbeans-11.3/extide/ant/bin:$PATH" make && make install
(あらかじめpkg install java/netbeans を行なっておいてください。)
cd /usr/src/share; make -k install
(-kオプションを付けないと途中エラーで止まってしまいます。)
cd {build_directory}
cmake -G "MSYS Makefiles" [additional CMake flags] {source_directory}
make install
ビルドが面倒な方は、バイナリも用意しています。
cd "ultravnc-code-r1257-UltraVNC Project Root"
patch -p1 < (パッチファイルの保存ディレクトリ)/ultravnc-code-r1257.diff
あとはVisual StudioでUltraVNC/vncviewer/vncviewer_vs2017.slnを開いてビルドしてください。
ビルドが面倒な方は、vncviewer.exeだけが入ったバイナリも用意しています。
cd /usr/ports/x11-toolkits/tk86
make patch
cd work
patch < (パッチファイルの保存ディレクトリ)/tk8.6.10-unix-tkUnixEvent.c.diff
cd ..
make install
cd /usr/src/sys
patch < FreeBSD-12.1-dev_sound_pci_hda_hdaa.c.diff
patch < FreeBSD-12.1-dev_sound_pcm_dsp.c.diff
cd amd64/conf
config GENERIC
cd ../compile/GENERIC
make cleandepend && make depend && make && make install && shutdown -r now
cd /usr/ports/graphics/exiftags
make patch
cd work/exiftags-1.01
patch < (patchダウンロードディレクトリ)/exiftags.exif.c.diff
patch < (patchダウンロードディレクトリ)/exiftags.olympus.c.diff
cd ../..
make && make (re)install
しかし、i386-wineはi386用ビルド環境を用意するのが面倒です・・・。
・i386ビルド環境
su
mkdir -p /compat/freebsd
cd /compat/freebsd
ftp ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/13.1-RELEASE/base.txz
tar xJf base.txz
cp -R /usr/ports usr/
chroot /compat/freebsd
pkg install wine-devel
cd /usr/ports/emulators/wine-devel/
make reinstall
exit
exit
rm -fr ~/.i386-wine-pkg
ln -s /compat/freebsd ~/.i386-wine-pkg
・ふぅ、これで終わり。
あとはwinecfgなりwinetricksなりを実行して環境構築。
その後、wineコマンドでwindowsアプリケーションを実行すればいい。
cd /usr/ports/x11-wm/windowmaker
cp (パッチ格納ディレクトリ/)windowmaker_src_misc.c.diff files/patch-zzz
make configure
pushd work/WindowMaker-*
patch < (パッチ格納ディレクトリ/)windowmaker_src_Makefile.diff
popd
make
make (re)install
cd /usr/ports/textproc/uim
cp (パッチ格納ディレクトリ/)uim.xim.convdisp.cpp.diff files/patch-zzz
make (re)install
cd /usr/ports/audio/wavplay
cp (パッチ格納ディレクトリ/)wavplay-patch-src_file.c files/patch-src_file.c
make clean patch (re)install
フリーソフトのオーナーに連絡するのが面倒臭い。
clampしていないので薮蛇かもしれん。
誰かやって。
FreeBSD-13.1-dev.sound.diff(FreeBSD 13.1用)
FreeBSD-13.3-dev.sound.diff(FreeBSD 13.3用)
cd /usr/src/sys
patch < FreeBSD-13.1-dev.sound.diff
cp -f /usr/src/sys/sys/soundcard.h /usr/include/sys/
1) ビルドワールド
cd ..
make buildworld && make installworld
reboot
or
2) カーネルと必要ファイルのみのインストール
cd amd64/conf
config GENERIC
cd ../compile/GENERIC
make cleandepend && make depend && make && make install
reboot
・iFi Unoの場合: FreeBSDが起動したら、iFi Unoの電源を入れて次のsysctlコマンドを実行。
sysctl dev.pcm.N.bitperfect=0
sysctl dev.pcm.N.play.vchanformat=s32le:2.0
sysctl dev.pcm.N.play.vchanrate=384000
sysctl dev.pcm.N.play.vchans=3
sysctl hw.snd.default_unit=N
mixer -f /dev/mixerN pcm 100 vol 100
(NにはiFi Unoのpcmデバイス番号を入力)
・Audirect ATOM3の場合: FreeBSDが起動したら、次のsysctlコマンドを実行。
sysctl dev.pcm.N.bitperfect=0
sysctl dev.pcm.N.dsd_to_dop=1
sysctl dev.pcm.N.play.vchanformat=s32le:2.0
sysctl dev.pcm.N.play.vchanrate=768000
sysctl dev.pcm.N.play.vchans=3
sysctl hw.snd.default_unit=N
mixer -f /dev/mixerN pcm 100 vol 100
(NにはAudirect ATOM3のpcmデバイス番号を入力)
pcm7の場合、下記内容を/etc/devd/pcm7.confに書き込んでFreeBSDの再起動、もしくはservice devd restartしてからATOM3を抜き差ししても行ける。
attach 100 { device-name "pcm7"; action "sysctl dev.pcm.7.bitperfect=0"; action "sysctl dev.pcm.7.dsd_to_dop=1"; action "sysctl dev.pcm.7.play.vchans=5"; action "sysctl dev.pcm.7.play.vchanformat=s32le:2.0"; action "sysctl dev.pcm.7.play.vchanrate=768000"; action "sysctl hw.snd.default_unit=7"; action "mixer -f /dev/mixer7 vol 85 pcm 100"; }; |
あーしんどかった!
cd /usr/ports/audio/musicpd
cp musicpd.dsd-native-FreeBSD.diff files/patch-zzz
make (re)install
前記パッチでカーネルが対応していないと意味ない。
このパッチだとmusicpdのDoPモードがバグるのでDoPモードが使えなくなります。(apply this patch, can't use musicpd's DoP mode.)
パッチを当てたFreeBSD-13 amd64環境とUSB DACはiFi Unoで動作確認しました。
しかしDSDは音がいい。
mkdir /tmp/dsfplay
cd /tmp/dsfplay
tar xzf ~/Downloads/dsfplay.tar.gz
make all install
rehash
dsfplay (.dsf file...)
※デバッグ目的で作成しました。makeする前に同梱しているFreeBSDカーネルに対するパッチを適用して/usr/include/sys/soundcard.hに対する変更が必須になってます。
同梱しているパッチは上記FreeBSD用DSD/DoP対応パッチと同じなので、必要な作業は上記を参照してください。
cd /usr/src/sys
patch < /tmp/dsfplay/FreeBSD-13.1-dev.sound.diff
cp -f sys/soundcard.h /usr/include/sys/
以下略。