mieki256's diary



2017/11/16(木) [n年前の日記]

#1 [raspberrypi][love2d] love2dが音を鳴らしてくれない件でまだハマってる

raspbian jessie までは pulseaudio が標準で入ってたけど、raspbian stretch は pulseaudio を使わなくなった、という話が気になるわけで。そのあたりが絡んでいて、love2d の音が鳴らないのではないか、と。

Raspberry Pi Zero W + raspbian stretch 上で、pulseaudio関係のパッケージをアンインストールしてから love2d をビルドしてみた。これで音が鳴るだろうか…。

pulseaudio関係をアンインストール。 :

sudo aptitude purge pulseaudio libpulse-dev pulseaudio-utils libsox-fmt-pulse
sudo 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 libraries
vlc等が 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 Pi3 で love2d の動作を試してみる。 :

手持ちの Raspberry Pi3 + 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 を動かせば、音が鳴ってくれたりしないだろうか。試してみるしかないかな…。

以上です。

過去ログ表示

Prev - 2017/11 - Next
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

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project