Raspberry pi I2S PCM1716でハイレゾ再生

moraでKalafinaのハイレゾ音源(24bit、96kHz)を購入したのでRPiのI2S出力で再生してみようと思います。

PCM1716を使用するにはシステムクロックが必要になるので
Raspberry Pi I2S 出力で外部クロック使用 その2
のようにPLL1707で外部クロックを生成するのですが、当時は16bit、48kHzまでしか想定していないのと768fsを使いたかったせいで、そのままでは使えませんでした。
そんなわけでシンプルにしてみました。


PLL1707は96kHzだと384fsまでしか出せないっぽいので、システムクロックにはPLL1707のSCKO3の384fsを。
RPiの入力に必要なビットクロック64fsはSCKO2の256fsを74AC163で4分周しました。


次にI2Sドライバー側です。過去の記事とほぼ一緒ですが...
以下、GPIOのピン番号はRPi B+用になってます。

sound/soc/bcm/bcm2708-i2s.c
53行目辺り
#include <linux/gpio.h>
#include <linux/delay.h>
539行目辺り
gpio_request_one(26, GPIOF_OUT_INIT_LOW, "MyTest");
if (sampling_rate == 48000 || sampling_rate == 96000) {
  gpio_set_value(26, 0);
} else {
  gpio_set_value(26, 1);
}
gpio_free(26);

gpio_request_one(13, GPIOF_OUT_INIT_LOW, "MyTest");
if (sampling_rate == 96000) {
  gpio_set_value(13, 1);
} else {
  gpio_set_value(13, 0);
}
gpio_free(13);

gpio_request_one(16, GPIOF_OUT_INIT_LOW, "MyTest");
if (data_length == 16) {
  gpio_set_value(16, 0);
} else {
  gpio_set_value(16, 1);
}
gpio_free(16);
GPIO26をPLL1707のFS1に繋いで44.1kHzか48kHzかを設定。
GPIO13をPLL1707のSRに繋いで上記周波数を2倍にするか否かを設定。
GPIO16をPCM1716のIWOに繋いで16bitか24bitかを設定しています。

694行目辺り
struct bcm2708_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
uint32_t mask;
int myerr;

switch (cmd) {
case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
  myerr = gpio_request_one(12, GPIOF_OUT_INIT_LOW, "MyTest");
  if (myerr == 0) {
    gpio_set_value(12, 1);
    gpio_free(12);
    mdelay(100);
  }

  bcm2708_i2s_start_clock(dev);

  if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
          mask = BCM2708_I2S_RXON;
  else
          mask = BCM2708_I2S_TXON;

  regmap_update_bits(dev->i2s_regmap,
                  BCM2708_I2S_CS_A_REG, mask, mask);
  break;

case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_SUSPEND:
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
  myerr = gpio_request_one(12, GPIOF_OUT_INIT_LOW, "MyTest");
  if (myerr == 0) {
    gpio_set_value(12, 0);
    gpio_free(12);
    mdelay(100);
  }

  bcm2708_i2s_stop(dev, substream, dai);
  break;
GPIO12をPCM1716のMUTEに繋いでます。

791行目辺り
static struct snd_soc_dai_driver bcm2708_i2s_dai = {
        .name   = "bcm2708-i2s",
        .probe  = bcm2708_i2s_dai_probe,
        .playback = {
                .channels_min = 2,
                .channels_max = 2,
                .rates =        SNDRV_PCM_RATE_8000_192000,
                .formats =      SNDRV_PCM_FMTBIT_S16_LE
                  // : disable for now, it causes white noise with xbmc
                                | SNDRV_PCM_FMTBIT_S24_LE
                                | SNDRV_PCM_FMTBIT_S32_LE
                },
        .capture = {
                .channels_min = 2,
                .channels_max = 2,
                .rates =        SNDRV_PCM_RATE_8000_192000,
                .formats =      SNDRV_PCM_FMTBIT_S16_LE
                                | SNDRV_PCM_FMTBIT_S24_LE
                                | SNDRV_PCM_FMTBIT_S32_LE
                },
        .ops = &bcm2708_i2s_dai_ops,
        .symmetric_rates = 1
};
24bitの所がコメントアウトされていたので外しました。しかし、最新のソースコードだと元々上記のようになってますね。

sound/soc/codecs/pcm1794a.c
24行目辺り
static struct snd_soc_dai_driver pcm1794a_dai = {
        .name = "pcm1794a-hifi",
        .playback = {
                .channels_min = 2,
                .channels_max = 2,
                .rates = SNDRV_PCM_RATE_8000_192000,
                .formats = SNDRV_PCM_FMTBIT_S16_LE |
                           SNDRV_PCM_FMTBIT_S24_LE |
                           SNDRV_PCM_FMTBIT_S32_LE
        },
};
一応、SNDRV_PCM_FMTBIT_S32_LEを追加。

sound/soc/bcm/rpi-dac.c
45行目辺り
static struct snd_soc_dai_link snd_rpi_rpi_dac_dai[] = {
{
        .name           = "HifiBerry Mini",
        .stream_name    = "HifiBerry Mini HiFi",
        .cpu_dai_name   = "bcm2708-i2s.0",
        .codec_dai_name = "pcm1794a-hifi",
        .platform_name  = "bcm2708-i2s.0",
        .codec_name     = "pcm1794a-codec",
        .dai_fmt        = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
                                //SND_SOC_DAIFMT_CBS_CFS,
                                SND_SOC_DAIFMT_CBM_CFS,
        .ops            = &snd_rpi_rpi_dac_ops,
        .init           = snd_rpi_rpi_dac_init,
},
};
外部クロックを使うように設定しています。

あとはドライバーをコンパイルして適当な場所にコピーして組み込めばOK。
sudo insmod snd-soc-bcm2708-i2s.ko
sudo insmod snd-soc-pcm1794a.ko
sudo insmod snd-soc-rpi-dac.ko

MPDで再生してみるとみごと鳴ってくれました。ヽ(´▽`)ノ




BABYMETALにはまった~(´~`)

9月にBABYMETALにはまってしまいました。(´~`)

随分前に海外の反応で取り上げられていて、メギツネのPVを見たのですが
その時はいい曲だなと思いつつも、メタル系の曲は聞かない人だったのでピンときませんでした。
今年の9月ごろになって、また海外の反応で取り上げられていて、なんでかな~と思って見てみると
海外のフェスに出たり、海外ツアーしていたんですね~(゜д゜)
今だとYouTubeにライブやフェスの映像が上がっていて、それを見ていらBABYMETALにはまってしまいました。(´∀`)

今年の初めにアルバムを出してるので、さっそく購入~





新品でも価格が安いのがいいですね。
BABYMETALはそんなに曲出してないので、ライブで歌う曲はほぼ収録されているようです。
どれもいい曲なのですが、挙げるとすれば
 BABYMETAL DEATH
 メギツネ
 紅月-アカツキ-
 おねだり大作戦
 4の歌
 Catch me if you can
 ヘドバンギャー! !
辺りが好みかな~。
「BABYMETAL DEATH」「Catch me if you can」辺りを上げているのはライブの影響だと思います。



CDもいいのですが私はライブ映像ではまったこともあり、おすすめはライブBDです!(=゜ω゜)ノ
今は残念なことにライブBDはまだ一つしか発売されていないようです。
こちらも早速購入~(´∀`)





なんと!このライブBD3公演分が収録されています。(ノ゜o゜)ノ
ただ、どれも2012年の公演なのでアルバムに収録されている新しめの曲がセットリストになかったりします。
それでも十分楽しめるかと思います。
あと、このBD見る前に背景を知っておいたほうが、より楽しめると思うので、(特にLEGEND "Z")
Amazonのレヴューの「女神降臨伝説。その時に何が起こったか想像しつつ見てほしい傑作。」を見ておくといいと思います。

ライブのほうですが、MCが一切ありません。その代り動画とナレーションが流れるようになっていて、その内容も会場を盛り上げるようになっています。そのせいで最初から最後まで会場のテンションが高く維持されている状態でした。(;゜ロ゜)
そのせいかな?観客が観客の上を波乗りしてたり、ペットボトルが飛んでたりもします。(笑

可能であるならこのライブBDはホームシアターの環境で視聴することをお勧めします。
AVアンプのYAMAHA RX-A3010 のシネマDSPをロキシーシアターに設定。
何度かLEGEND"Z"をホームシアター環境で視聴したのですが、ウーファー(impact-10 Velodyne)がかなり効いていて迫力があります。(´∀`)
1曲目の「イジメ、ダメ、ゼッタイ」はそうでもないのですが、2曲目の「いいね!」からウーファーの鳴り方がヤヴァイです。ヽ(;´д`)ノ
低音がよく出るヘッドホンやイヤホンで聞くのとはまったく違います。いわゆるこれが体で感じる音ってやつかもしれません。

10月末には新しいライブBD「LIVE~LEGEND 1999&1997 APOCALYPSEが発売されるので、こちらも楽しみですね~('∇')



ライブBDやYouTubeのライブ映像をみていると、やっぱ自分も現地に行きたくなりますよね~?
丁度、来年
 2015/01/10 さいたまスーパーアリーナで
「BABYMETAL LEGEND “2015” ~新春キツネ祭り~」
が開催されるとのこと。
さっそくファンクラブに相当する?「BABYMETAL APOCALYPSE」に加入というか購入?
して先行抽選に申し込んで当選!ヽ(´▽`)ノ
最初なのでアリーナ立見は怖くて、スタンド指定席の方にしておきました。
アリーナ立見はサイリウムやメガネがふっとんだり、靴が脱げたり、人が降ってきたりするそうなので
かなりハードっぽいです。でも、盛り上がれるのはアリーナ立見でしょうね~

ちなみに「BABYMETAL APOCALYPSE」を購入するとバインダーとブックレットが送られてきます。


中身はこんな感じ。