2017/11/16(木) [n年前の日記]
#1 [raspberrypi][love2d] love2dが音を鳴らしてくれない件でまだハマってる
raspbian jessie までは pulseaudio が標準で入ってたけど、raspbian stretch は pulseaudio を使わなくなった、という話が気になるわけで。そのあたりが絡んでいて、love2d の音が鳴らないのではないか、と。
Raspberry Pi Zero W + raspbian stretch 上で、pulseaudio関係のパッケージをアンインストールしてから love2d をビルドしてみた。これで音が鳴るだろうか…。
残ってるのは以下。
love2dをビルド。1時間半かかった。
試してみたが、ダメだった。相変わらず音を出そうとすると「Illegal instruction」と表示される。
Raspberry Pi Zero W + raspbian stretch 上で、pulseaudio関係のパッケージをアンインストールしてから love2d をビルドしてみた。これで音が鳴るだろうか…。
◎ pulseaudio関係をアンインストール。 :
sudo aptitude purge pulseaudio libpulse-dev pulseaudio-utils libsox-fmt-pulsesudo aptitude purge hoge で、設定も含めてパッケージをアンインストールできる。
残ってるのは以下。
$ sudo aptitude search pulse | grep -E '^i' i A libpulse-mainloop-glib0 - PulseAudio client libraries (glib support) i A libpulse0 - PulseAudio client librariesvlc等が libpulse0 を必要とするらしいので残しておいた。
love2dをビルド。1時間半かかった。
試してみたが、ダメだった。相変わらず音を出そうとすると「Illegal instruction」と表示される。
◎ 「Illegal instruction」が気になる。 :
「Illegal instruction」というメッセージでググってるうちに気になる話を見かけた。armv7l の命令を armv6l で実行しようとした場合、そういうエラーメッセージを出す場合もあるそうで。
_raspberry pi - Illegal instructionというエラーについて - スタック・オーバーフロー
もしかすると、raspbian stretch の SDL2 を作る際に必要になるパッケージの中に ―― それも音関係を処理するパッケージの中に、ARMv7 が載ってる Raspberry Pi2 / Pi3 を前提にして作られてしまったパッケージが存在していて、それを ARMv6 の Raspberry Pi Zero W 上で動かそうとした、からエラーが出る、という可能性はないだろうか。raspbian jessie の頃は ARMv6のことも考えて作られてたけど、raspbian stretch は、まだそこまで手が回ってない、とか。
だとすれば、ARMv7 が載ってる Raspberry Pi3上で同じ作業をすると、そちらではすんなり動く・音が鳴る、かもしれない。
_raspberry pi - Illegal instructionというエラーについて - スタック・オーバーフロー
もしかすると、raspbian stretch の SDL2 を作る際に必要になるパッケージの中に ―― それも音関係を処理するパッケージの中に、ARMv7 が載ってる Raspberry Pi2 / Pi3 を前提にして作られてしまったパッケージが存在していて、それを ARMv6 の Raspberry Pi Zero W 上で動かそうとした、からエラーが出る、という可能性はないだろうか。raspbian jessie の頃は ARMv6のことも考えて作られてたけど、raspbian stretch は、まだそこまで手が回ってない、とか。
だとすれば、ARMv7 が載ってる Raspberry Pi3上で同じ作業をすると、そちらではすんなり動く・音が鳴る、かもしれない。
◎ Raspberry Pi3 で love2d の動作を試してみる。 :
手持ちの Raspberry Pi3 + raspbian stretch + love2d で、音が鳴るか試してみたり。
ますは公式リポジトリ版のパッケージをインストール。
GL Driver (Fake DKMS) を有効化。公式リポジトリ版の SDL2関係は OpenGL を使うオプションでビルドされているらしいので。
love2d で音が出るか試してみた。音が鳴った。相変わらず、jack server がどうこうとメッセージが出るし、なんだかワンテンポ遅れてから鳴ってるけど、それでも一応音は鳴った。
ということは、raspbian stretch の公式リポジトリにアップされてる SDL2 + love2d は、必ずしも音が鳴らない、というわけではないということかな…。
しかし、何故か途中で音が鳴らなくなる。
ふと、Raspberry Pi3 に、pulseaudio が入っていて、動いてることに気づいた。おそらく gosu を動かす際にインストールしたのではないかな…。
pulseaudio --kill としてから love2d を動かすと、音がずっと鳴ってくれるようになった。ただ、love2d を動かすと、その時点で pulseaudio が起動してしまう模様。love2d を終了させてから確認すると、また pulseaudio が復活してる。
現状、pulseaudio と jack 関係でインストールされていたのは以下。
pulseaudio をアンインストールしてみる。設定まで含めて削除。
つまり、raspbian stretch + love2d だから音が鳴らない、というわけではないらしい。少なくとも、Raspberry Pi3 + raspbian stretch + love2d なら、音が鳴る。ただし、Raspberry Pi Zero W + raspbian stretch + love2d では、音が鳴らない。
となると…。これはもしかすると、raspbian stretch の公式リポジトリには、ARMv7を前提にしたパッケージが色々アップロードされていて、ARMv6の Raspberry Pi Zero W にインストールしてしまうと不具合が起きる、ということになるのだろうか。
本当にそうかな? 実は Raspberry Pi Zero W も、raspbian stretch を入れてすぐに love2d を動かせば、音が鳴ってくれたりしないだろうか。試してみるしかないかな…。
ますは公式リポジトリ版のパッケージをインストール。
$ sudo aptitude install love 以下の新規パッケージがインストールされます: binfmt-support{a} liballegro4.4{a} libdevil1c2{a} libluajit-5.1-2{a} love
GL Driver (Fake DKMS) を有効化。公式リポジトリ版の SDL2関係は OpenGL を使うオプションでビルドされているらしいので。
love2d で音が出るか試してみた。音が鳴った。相変わらず、jack server がどうこうとメッセージが出るし、なんだかワンテンポ遅れてから鳴ってるけど、それでも一応音は鳴った。
ということは、raspbian stretch の公式リポジトリにアップされてる SDL2 + love2d は、必ずしも音が鳴らない、というわけではないということかな…。
しかし、何故か途中で音が鳴らなくなる。
ふと、Raspberry Pi3 に、pulseaudio が入っていて、動いてることに気づいた。おそらく gosu を動かす際にインストールしたのではないかな…。
$ ps x | grep pulse 1536 ? S<l 0:01 /usr/bin/pulseaudio --start --log-target=syslog
pulseaudio --kill としてから love2d を動かすと、音がずっと鳴ってくれるようになった。ただ、love2d を動かすと、その時点で pulseaudio が起動してしまう模様。love2d を終了させてから確認すると、また pulseaudio が復活してる。
現状、pulseaudio と jack 関係でインストールされていたのは以下。
$ sudo aptitude search pulse | grep -E '^i' i A libpulse-dev - PulseAudio client development headers and libraries i A libpulse-mainloop-glib0 - PulseAudio client libraries (glib support) i A libpulse0 - PulseAudio client libraries i A libpulsedsp - PulseAudio OSS pre-load library i pulseaudio - PulseAudio sound server i A pulseaudio-utils - Command line tools for the PulseAudio sound server $ sudo aptitude search jack | grep -E '^i' i A jackd - JACK Audio Connection Kit (default server package) i A jackd2 - JACK Audio Connection Kit (server and example clients) i A libjack-jackd2-0 - JACK Audio Connection Kit (libraries) i A qjackctl - User interface for controlling the JACK sound server
pulseaudio をアンインストールしてみる。設定まで含めて削除。
sudo aptitude purge pulseaudioこの状態でも love2d の音は鳴る。しかも、pulseaudio が入っていた時より音が鳴り始めるまでの反応が全然早い。
つまり、raspbian stretch + love2d だから音が鳴らない、というわけではないらしい。少なくとも、Raspberry Pi3 + raspbian stretch + love2d なら、音が鳴る。ただし、Raspberry Pi Zero W + raspbian stretch + love2d では、音が鳴らない。
となると…。これはもしかすると、raspbian stretch の公式リポジトリには、ARMv7を前提にしたパッケージが色々アップロードされていて、ARMv6の Raspberry Pi Zero W にインストールしてしまうと不具合が起きる、ということになるのだろうか。
本当にそうかな? 実は Raspberry Pi Zero W も、raspbian stretch を入れてすぐに love2d を動かせば、音が鳴ってくれたりしないだろうか。試してみるしかないかな…。
[ ツッコむ ]
以上です。