Julia 1.3.1にSampledSignalsをインストールした

先日のアドベントカレンダーへのエントリ中で、「今回のエントリはJulia 1.0.5用に書いています。というのも、Julia 1.2や1.3あたりからLibSndFileなどのインストールがうまくいかない状況になっているからです」と書きましたが、それが解決できたので記録を残しておきます。

marui.hatenablog.com

(TLDR; SampledSignalsの前にUnitfulをインストールしないこと)

まず、どういう状況になっていたかというと、SampledSignalsをインストールしようとしても以下のようなエラーが出てしまい、インストールさせてくれないというものでした。

(v1.3) pkg> add SampledSignals
 Resolving package versions...
ERROR: Unsatisfiable requirements detected for package Unitful [1986cc42]:
 Unitful [1986cc42] log:
 ├─possible versions are: [0.9.0, 0.10.0, 0.11.0, 0.12.0, 0.13.0, 0.14.0, 0.15.0, 0.16.0, 0.17.0, 0.18.0] or uninstalled
 ├─restricted to versions 0.18.0 by an explicit requirement, leaving only versions 0.18.0
 └─restricted by compatibility requirements with SampledSignals [bd7594eb] to versions: 0.17.0 — no versions left
   └─SampledSignals [bd7594eb] log:
     ├─possible versions are: [2.0.0, 2.1.0] or uninstalled
     ├─restricted to versions * by an explicit requirement, leaving only versions [2.0.0, 2.1.0]
     └─restricted by compatibility requirements with FFTW [7a1cc6ca] to versions: 2.1.0 or uninstalled, leaving only versions: 2.1.0
       └─FFTW [7a1cc6ca] log:
         ├─possible versions are: [0.1.0-0.1.2, 0.2.0-0.2.4, 0.3.0, 1.0.0-1.0.1, 1.1.0, 1.2.0] or uninstalled
         └─restricted to versions 1.2.0 by an explicit requirement, leaving only versions 1.2.0

どうやらUnitfulとFFTWのバージョンがSampledSignalsと整合しないようです。Unitful 0.17.0とFFTW 1.2.0が欲しいのかな。 statusを見てみると、

(v1.3) pkg> st
    Status `~/.julia/environments/v1.3/Project.toml`
  [537997a7] AbstractPlotting v0.9.16
  [c52e3926] Atom v0.11.3

(中略)

  [7a1cc6ca] FFTW v1.2.0

(中略)

  [1986cc42] Unitful v0.18.0
  [d6d074c3] VideoIO v0.6.10

となっており、たしかにUnitfulのバージョンが0.18.0ということでマッチしていません。FFTWは良さそうな感じです。

でも、念のため、どちらもアンインストールします。

(v1.3) pkg> rm Unitful
  Updating `~/.julia/environments/v1.3/Project.toml`
  [1986cc42] - Unitful v0.18.0
  Updating `~/.julia/environments/v1.3/Manifest.toml`
  [187b0558] - ConstructionBase v1.0.0
  [1986cc42] - Unitful v0.18.0

(v1.3) pkg> rm FFTW
  Updating `~/.julia/environments/v1.3/Project.toml`
  [7a1cc6ca] - FFTW v1.2.0
  Updating `~/.julia/environments/v1.3/Manifest.toml`
 [no changes]

で、ここでSampledSignalsをインストール。

(v1.3) pkg> add SampledSignals
 Resolving package versions...
 Installed Colors ───── v0.11.1
 Installed ColorTypes ─ v0.9.0
  Updating `~/.julia/environments/v1.3/Project.toml`
  [bd7594eb] + SampledSignals v2.1.0
  Updating `~/.julia/environments/v1.3/Manifest.toml`
  [3da002f7] ↑ ColorTypes v0.8.1 ⇒ v0.9.0
  [5ae59095] ↑ Colors v0.10.1 ⇒ v0.11.1
  [bd7594eb] + SampledSignals v2.1.0
  [1986cc42] + Unitful v0.17.0

うまくいった。こんな単純なことだったのか……。 FFTWについての出力がないので、関係ないのかな? 常用するものなので再インストールしておかないと。

(v1.3) pkg> add FFTW
 Resolving package versions...
  Updating `~/.julia/environments/v1.3/Project.toml`
  [7a1cc6ca] + FFTW v1.2.0
  Updating `~/.julia/environments/v1.3/Manifest.toml`
 [no changes]

これでLibSndFileもインストールできるし、DSPを使うプログラムもJulia 1.3で動かせるようになった。良かった。

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.3.1 (2019-12-30)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using FileIO: load

julia> import LibSndFile

julia> snd = load("speech_male.flac")
4659900-frame, 1-channel SampleBuf{FixedPointNumbers.Fixed{Int16,15}, 2}
105.66666666666667s sampled at 44100.0Hz
▇▇▆▆▇▇▆▆▆▆▅▇▆▆▆▆▆▆▆▆▆▆▆▆▆▅▃▇▆▆▆▇▆▆▆▆▆▆▆▆▆▇▆▆▆▆▆▆▆▆▆▆▆▅▆▇▆▆▆▇▇▆▇▆▆▇▆▆▇▆▆▆▆▆▆▆▁▁▁▁

気兼ねなく、年が越せる!